版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/u011066470/article/details/97291377
————————————————
GROUP BY滿足的規則:
所有select 字段,除了聚合函數中的字段,都必須出現在GROUP BY 中。
例如:SELECT name,age,max(salary) FROM t_employee GROUP BY name,age
salary 字段可以不用出現在 GROUP BY 中
only_full_group_by的作用
ONLY_FULL_GROUP_BY是MySQL提供的一個sql_mode,通過這個sql_mode來提供SQL語句GROUP BY合法性的檢查,在MySQL的sql_mode是非ONLY_FULL_GROUP_BY語義時。一條select語句,MySQL允許target list中輸出的表達式是除聚集函數或group by column以外的表達式,這個表達式的值可能在經過group by操作后變成undefined。
而對於語義限制都比較嚴謹的多家數據庫,如SQLServer、Oracle、PostgreSql都不支持select target list中出現語義不明確的列,這樣的語句在這些數據庫中是會被報錯的,所以從MySQL 5.7版本開始修正了這個語義,就是我們所說的ONLY_FULL_GROUP_BY語義,例如查看MySQL 5.7默認的sql_mode如下:
mysql> select @@global.sql_mode;