MySQL 对聚合函数的独特处理,无需 GROUP BY
在 MySQL 中,与其他关系数据库管理系统不同,可以使用聚合函数在 SELECT 列表中而不指定 GROUP BY 子句。这种行为在熟悉更具限制性的 DBMS 平台的开发人员中引起了疑问。
MySQL 基本原理
MySQL 在设计上允许这种灵活性,认为它是对 SQL 的有价值的扩展标准。当在没有 GROUP BY 的情况下使用聚合函数时,返回的结果表示包含对整个表计算的聚合值的单行。这在需要汇总信息而不需要分组的情况下非常有用。
示例
例如,考虑查询:
SELECT col1, col2, SUM(col3) FROM tbl1;
如果没有 GROUP BY,MySQL 会将其解释为单个组并提供以下输出:
col1 col2 SUM(col3) ------------------------- (First row value of col1) (First row value of col2) (Sum of all col3 values)
ONLY_FULL_GROUP_BY 的限制
MySQL 处理聚合的宽松方法引入了不带 GROUP BY 的函数,并将 ONLY_FULL_GROUP_BY 设置为 OFF。随着MySQL版本5.7.5的发布,默认启用ONLY_FULL_GROUP_BY,这限制了这种行为。
启用ONLY_FULL_GROUP_BY可确保聚合函数只能与GROUP BY子句结合使用,如果遇到没有它的查询。此更改符合 SQL 标准并促进数据一致性。
以上是MySQL为什么不用GROUP BY就可以使用聚合函数?的详细内容。更多信息请关注PHP中文网其他相关文章!