天天看點

mysql groupby 知識點一:select中字段是否必須出現在groupby中

基本共識:進行groupby時,groupby中的字段可以不出現在select中,但是select中隻能有groupby中的字段和函數.

但如下示例sql,依然能正常執行:

資料表:

mysql groupby 知識點一:select中字段是否必須出現在groupby中

執行如下sql,發現能正常執行,而且groupby後預設取每組第一條資料

select * from user_info group by grade;

結果:

mysql groupby 知識點一:select中字段是否必須出現在groupby中

經查找資料,分析,與MySql資料庫中sql_mode是否含有only_full_group_by有關.如果無only_full_group_by,則groupby不受上面的認知限制,否則,必須按上面的共識操作.

1、檢視sql_mode

select

@@sql_mode;

本地庫:

NO_ENGINE_SUBSTITUTION

其他庫:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

2、去掉ONLY_FULL_GROUP_BY,重新設定值

set @@sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER

,NO_ENGINE_SUBSTITUTION';

3、上面是改變了全局sql_mode,對于建立的資料庫有效。對于已存在的資料庫,則需要在對應的資料下執行

set sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

繼續閱讀