關於group by的一個問題

項目場景:

有時候,遇到數據庫重複數據,需要將數據進行分組,並取出其中一條來展示,這時就需要用到group by語句。
但是,如果mysql是高版本,當執行group by時,select的字段不屬於group by的字段的話,sql語句就會報錯。

 

原因分析:
一、原理層面
這個錯誤發生在mysql 5.7.5 版本及以上版本會出現的問題:
mysql 5.7.5版本以上默認的sql配置是:sql_mode=“ONLY_FULL_GROUP_BY”,這個配置嚴格執行了"SQL92標準"。
很多從5.6升級到5.7時,爲了語法兼容,大部分都會選擇調整sql_mode,使其保持跟5.6一致,爲了儘量兼容程序。

二、sql層面
在sql執行時,出現該原因,簡單來說就是:
由於開啓了ONLY_FULL_GROUP_BY的設置,如果select 的字段不在 group by 中,
並且select 的字段未使用聚合函數(SUM,AVG,MAX,MIN等)的話,那麼這條sql查詢是被mysql認爲非法的,會報錯誤…

 

ANY_VALUE()函數說明:

MySQL有any_value(field)函數,它主要的作用就是抑制ONLY_FULL_GROUP_BY值被拒絕。
這樣sql語句不管是在ONLY_FULL_GROUP_BY模式關閉狀態還是在開啓模式都可以正常執行,不被mysql拒絕。
any_value()會選擇被分到同一組的數據裏第一條數據的指定列值作爲返回數據。
官方有介紹,地址:https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html#function_any-value
轉自【格子衫111】的文章

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章