在 MySQL 中,我观察到尽管没有 GROUP BY 子句,但在 SELECT 列表中使用 AGGREGATE FUNCTION 的语句会被执行。如果我们这样做,其他 RDBMS 产品(如 SQL Server)会抛出错误。
例如,SELECT col1,col2,sum(col3) FROM tbl1;在没有任何错误的情况下执行并返回 col1、col2 的第一行值和 col3 的所有值的总和。上述查询的结果是单行。
谁能告诉为什么 MySQL 会发生这种情况?
提前致谢!!
这是设计使然 - 它是 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 启用它。
| 归档时间: |
|
| 查看次数: |
8733 次 |
| 最近记录: |