为什么此查询返回带有空值的行

epe*_*leg 8 mysql sql null resultset

相比

SELECT distinct u_id,timestamp as time
FROM my_table;
Run Code Online (Sandbox Code Playgroud)

SELECT distinct u_id,max(timestamp) as time
FROM my_table;
Run Code Online (Sandbox Code Playgroud)

当我的表根本没有行时(或者如果我添加一个不匹配任何行的where子句):

前者返回一个空结果集(这是我所期望的),而后者返回一个空行作为其两个字段的值的行.

有人可以向我解释为什么第二个就像它那样行事?

evi*_*one 17

MySQL文档说

如果没有匹配的行,则MAX()返回NULL.

如果您没有数据,那么它只返回两个值为NULL.

如果您希望第二个查询也返回空结果集,那么您必须过滤掉NULL值,例如使用可以与聚合函数一起使用的HAVING子句:

SELECT DISTINCT u_id, MAX(timestamp) as time FROM my_table GROUP BY u_id HAVING time IS NOT NULL;
Run Code Online (Sandbox Code Playgroud)

  • 这在技术上只有答案的一半 - 另一半是第二个中没有group-by子句,而使用与非聚合混合的聚合函数,这就是u_id为'NULL'的原因. (2认同)