查詢「user」表每一個性別的最大年齡的基本信息mysql
個人第一反應是寫出了下面這個sqlsql
select * from user group by sex order by age desc
可是被mysql 版本號爲「5.7.20「無情的拋出了異常:windows
[Err] 1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.user.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
大概就是說,group by 以外的屬性不能查詢,除非有聚合函數函數
我就在網上查看了一下先人們的解決方法this
mysql從5.7之後,默認開啓group by的嚴格模式。若是錯誤號是1055,處理方式能夠2種,
1)更改my.cnf(windows下是my.ini)中的sql_mode參數,去掉:only_full_group_by。
2)修改SQL語句,查詢的列和group by的列,須要一致(主鍵能夠忽略、用了函數的列能夠忽略)
group by 分組後,你分組的列必需要在select 後面,而且沒有被分組的列不能在select後面,但後select後面能夠接聚合函數 count(*)等, 舉個例子:
select a,b from A group by a ;這個對 a分組,全部查詢到a每一行都是惟一的,可是a相同的狀況下,b可能會有多個,這個a只有一條記錄,可是b有多條記錄,這個結果是無法顯示的, 例子以下spa
全部只能寫成 select a,b from A group by a,b; 或者 select a,count(b) from A group by a;