一尘不染

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

mysql

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

例如,SELECT col1,col2,sum(col3) FROM tbl1;被执行而没有任何错误,并返回col1,col2的第一行值和col3的所有值之和。以上查询的结果是一行。

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

提前致谢!!


阅读 337

收藏
2020-05-17

共1个答案

一尘不染

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

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

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

有关更多信息,请参阅分组处理文档

该设置ONLY_FULL_GROUP_BY控制着这种行为,请参见5.1.7 Server SQL
Modes
启用此功能将不允许查询聚合函数缺少group
by语句的查询,并且默认情况下从MySQL版本5.7.5开始启用该查询。

2020-05-17