基本共識:進行groupby時,groupby中的字段可以不出現在select中,但是select中隻能有groupby中的字段和函數.
但如下示例sql,依然能正常執行:
資料表:
執行如下sql,發現能正常執行,而且groupby後預設取每組第一條資料
select * from user_info group by grade;
結果:
經查找資料,分析,與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';