聚合SQLite函数 - 意外结果

时间:2014-03-07 10:08:39

标签: sqlite

sqlite查询按预期返回零行:

SELECT 1 FROM tbl WHERE 0;

另一方面,此查询返回包含空列的一行:

SELECT MAX(1) FROM tbl WHERE 0;

为什么第二个查询返回一行而不是零行?

1 个答案:

答案 0 :(得分:1)

'Normal'查询为FROM子句中表的每个(已过滤)记录返回一个结果。

但是,当您使用某些聚合函数时,结果在源表中为每个创建一条记录。如果没有GROUP BY子句,整个表就是一个组。

使用GROUP BY时,空组没有结果。 但是,如果没有GROUP BY,您总是只有一个组并获得一个结果记录,即使该组最终为空。

如果你的查询也使用GROUP BY(使用常量值,将所有记录(如果有的话)放入一个组中),那么你的查询将获得零行MAX:

SELECT MAX(1) FROM tbl WHERE 0 GROUP BY NULL;