首页 > 解决方案 > 没有 Group By 的 SQL MAX 函数行为

问题描述

考虑下表:

CREATE TABLE test (
  id INT
);
INSERT INTO test (id) VALUES (1);
INSERT INTO test (id) VALUES (2);

如果我运行查询:

SELECT MAX(id) as MaxId FROM test WHERE id > 10;

我得到一个值为 null 的单行MaxId

但是,如果我运行以下命令:

SELECT MAX(id) as MaxId FROM test WHERE id > 10 GROUP BY id;

我没有返回任何行。

由于WHERE两种情况下的条件相同,因此在任何一种情况下都不会选择任何行。我的理解是,第二种情况下的 Group By 没有任何意义,因为没有返回任何行。

有人可以澄清为什么我在第一个查询中得到一行有null值而在第二个查询中没有返回行吗?

标签: sqlgroup-byaggregate-functions

解决方案


no 的聚合查询GROUP BY 总是返回一行(好吧,除非该行被HAVING子句过滤掉)。

如果表中没有行,或者WHERE子句过滤掉所有行,那么聚合结果就是一行有NULL值。

这就是您的第一个查询中发生的情况。

您的第二个查询有一个GROUP BY. 它每组返回一行。但是没有组,因此查询不返回任何行。


推荐阅读