sqlite SELECT AVG返回null

sqlite SELECT AVG返回null,sql,sqlite,average,Sql,Sqlite,Average,有人知道为什么SQL SELECT查询在从空表中选择时不返回行,但在尝试从空表中的列中选择平均值时返回?行为上的差异对我来说似乎很奇怪。如果这有什么不同的话,我正在使用sqlite数据库 以下是两个问题: 正常选择:从表1中选择一个 如果表1是空的,我就不会返回任何行 平均值选择:从表1中选择平均值(a) 如果表1为空,则返回一行 我不是正数,但要确定平均数,必须除以行数。如果行数为零,则除以它将是未定义的。因此,NULL返回。只是猜测。你在做一个聚合。由于聚合是为0-n行定义的(在本例中,0行

有人知道为什么SQL SELECT查询在从空表中选择时不返回行,但在尝试从空表中的列中选择平均值时返回?行为上的差异对我来说似乎很奇怪。如果这有什么不同的话,我正在使用sqlite数据库

以下是两个问题:

正常选择:从表1中选择一个 如果表1是空的,我就不会返回任何行

平均值选择:从表1中选择平均值(a)

如果表1为空,则返回一行

我不是正数,但要确定平均数,必须除以行数。如果行数为零,则除以它将是未定义的。因此,NULL返回。只是猜测。

你在做一个聚合。由于聚合是为0-n行定义的(在本例中,0行产生null),因此您将始终返回一个结果(在本例中正好是一个)

换句话说,您并不是要求表中的行,而是要求表中一列的平均值,这就是您得到的结果。在这种情况下,获得除一行以外的任何内容都会更加奇怪

如果您也要求使用非聚合列,例如

SELECT Salesperson, AVG(Sale)
FROM Sales
GROUP BY Salesperson
然后我希望您不会返回任何行,因为没有任何内容可以满足非聚合选择。

来自ANSI 92规范

b) 如果平均值、最大值、最小值或总和为 那么

          Case:

          i) If TXA is empty, then the result is the null value.

更多信息请访问:

AVG是一个与COUNT类似的聚合函数。如果您这样做:

从表1中选择COUNT(a),您希望得到一个零行

这与AVG、SUM等相同。您将获得聚合函数结果的一行