没有 GROUP BY 子句的 MySQL 聚合函数

Yas*_*uru 5 mysql sql-server

在 MySQL 中,我观察到尽管没有 GROUP BY 子句,但在 SELECT 列表中使用 AGGREGATE FUNCTION 的语句会被执行。如果我们这样做,其他 RDBMS 产品(如 SQL Server)会抛出错误。

例如,SELECT col1,col2,sum(col3) FROM tbl1;在没有任何错误的情况下执行并返回 col1、col2 的第一行值和 col3 的所有值的总和。上述查询的结果是单行。

谁能告诉为什么 MySQL 会发生这种情况?

提前致谢!!

jpw*_*jpw 6

这是设计使然 - 它是 MySQL 允许的标准的众多扩展之一。

对于像SELECT name, MAX(age) FROM t;参考文档这样的查询说:

如果没有 GROUP BY,则只有一个组,并且不确定要为该组选择哪个名称值

有关更多信息,请参阅group by handling的文档

该设置ONLY_FULL_GROUP_BY控制此行为,请参阅5.1.7 服务器 SQL 模式启用此功能将禁止具有缺少 group by 语句的聚合函数的查询,并且默认情况下从 MySQL 版本 5.7.5 启用它。