没有 Group By 的 SQL MAX 函数行为

Posted

技术标签:

【中文标题】没有 Group By 的 SQL MAX 函数行为【英文标题】:SQL MAX Function Behavior without Group By 【发布时间】:2021-07-21 08:23:41 【问题描述】:

考虑下表:

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;

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

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

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

我没有返回任何行。

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

有人能解释一下为什么我在第一个查询中得到一个带有 null 值的行,而在第二个查询中没有返回任何行吗?

【问题讨论】:

【参考方案1】:

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

如果表中没有行,或者WHERE 子句过滤掉所有行,则聚合结果为具有NULL 值的一行。

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

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

【讨论】:

以上是关于没有 Group By 的 SQL MAX 函数行为的主要内容,如果未能解决你的问题,请参考以下文章

怎么使用group by?

sql 聚合函数和group by 联合使用

sql中order by和group by的区别

sql语言 怎么求每组最大,就是用group by 分组后,求每组某列最大?

SQL Server报错:选择列表中的列无效,因为该列没有包含在聚合函数或 GROUP BY 子句中

SQL --------------- GROUP BY 函数