正常列后跟agregate函数,但不在group by中

Cra*_*lus 3 mysql sql group-by aggregate-functions

我知道只有在Group By包含它们的情况下才允许使用普通列后跟聚合函数.
但是,为什么以下工作呢?

mysql> select payee,sum(amount) from checks;  
+---------+-------------+  
| payee   | sum(amount) |  
+---------+-------------+  
| Ma Bell |      893.76 |  
+---------+-------------+  
1 row in set (0.00 sec)  
Run Code Online (Sandbox Code Playgroud)

Mic*_*son 7

此行为是MySql的"扩展":

MySQL扩展了使用范围,GROUP BY因此选择列表可以引用GROUP BY子句中未命名的非聚合列.

但是,此行为实际上是MySql中的可配置设置:

ONLY_FULL_GROUP_BY

不允许选择列表或(从MySQL 5.1.10开始)HAVING列表引用未在GROUP BY子句中命名的非聚合列的查询.

最好是尊重group by,并添加所有的非聚集列,尤其是如果有,你可能有一天迁移到了一台服务器可能ONLY_FULL_GROUP_BY打开.

  • 默认情况下应该启用+1`ONLY_FULL_GROUP_BY`恕我直言 (2认同)
  • @njk如果没有启用它,对于学习SQL的人来说是一种伤害.特别是如果他们转移到另一个系统 (2认同)