sql - 没有 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
值而在第二个查询中没有返回行吗?
解决方案
no 的聚合查询GROUP BY
总是返回一行(好吧,除非该行被HAVING
子句过滤掉)。
如果表中没有行,或者WHERE
子句过滤掉所有行,那么聚合结果就是一行有NULL
值。
这就是您的第一个查询中发生的情况。
您的第二个查询有一个GROUP BY
. 它每组返回一行。但是没有组,因此查询不返回任何行。
推荐阅读
- tensorflow - TensorFlow Object Detection mAP - 在训练或验证数据集上计算?
- regex - 正则表达式效率
- javascript - 使用 vanilla js 读取 html 的数据属性
- spring - 在 Spring 中处理不支持的媒体类型
- react-native - 使用循环数据反应原生创建文本输入
- python - 基于用户输入的基本 Python 函数选择系统
- oracle - Oracle SQL - ORA-04079: 无效的触发器插入
- java - 大量创建石英触发器
- r - 目标“sysdata”的配方失败 - 不允许负长度向量(编译 R-cran v4.0.0)
- rust - Rust:impl trait 不能在线程之间安全共享