有人可以解释为什么同一个查询会返回不同的计数,具体取决于是否使用了聚合函数?
--Returns 1
select count(*) from
(
select min(date_field) from mytable where field1 = 'xxx'
)
--Returns 0
select count(*) from
(
select * from mytable where field1 = 'xxx'
)
答案 0 :(得分:4)
如果没有GROUP BY
子句,则查询:
select min(date_field) from mytable where field1 = 'xxx'
总是只返回一行,无论表中有多少行符合WHERE
子句。
缺少GROUP BY
子句会强制引擎仅从WHERE
子句筛选的行中创建一个组,因此它返回一行。如果组中没有行,则表达式min(date_field)
将计算为NULL
。
另一方面,查询:
select * from mytable where field1 = 'xxx'
生成零行或多行(与WHERE
子句匹配的行)。