[Err] 1055 - Expression 關於mysql的 group by 的問題

查詢「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;

 

解決方法:

  • 修改配置文件
  • 換mysql版本(親測5.5版本是能夠的)
  • 想辦法修改sql語句(也就感受這個實用點了,可是要怎麼改呢,這個又難住我了)
相關文章
相關標籤/搜索