比较
SELECT distinct u_id,timestamp as time FROM my_table;
和
SELECT distinct u_id,max(timestamp) as time FROM my_table;
当我的表根本没有行时(或者如果我添加了一个不匹配行的where子句):
前者返回一个空的结果集(这是我期望的结果),而后者返回一个单行,其两个字段的值都为null。
有人可以向我解释为什么第二个为什么这样做吗?
MySQL文档说
如果没有匹配的行,则MAX()返回NULL。
而且,如果您没有数据,那么它只会将两个值都返回为NULL。
如果您希望第二个查询也返回空结果集,则必须使用可与聚合函数一起使用的HAVING子句过滤掉NULL值:
SELECT DISTINCT u_id, MAX(timestamp) as time FROM my_table GROUP BY u_id HAVING time IS NOT NULL;