mysql高版本(8.0+)group_by報錯的處理方法
1. 原因
這個錯誤一般發(fā)生在mysql 5.7以及 5.7以上的版本中,其原因是mysql的默認配置中,sql_mode=“ONLY_FULL_GROUP_BY” 這個配置嚴格執(zhí)行了 ‘SQL92標準’,查詢字段沒有在group by 字段后同時出現(xiàn),那么sql語句就不合法,就會拋出錯誤
Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'xxx' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
這是由于MySQL高版本默認啟用了sql_mode的only_full_group_by模式,對于GROUP BY操作,要求SELECT語句中的字段必須出現(xiàn)在GROUP BY子句中或者使用聚合函數(shù)進行處理。否則就會報上述錯誤。
2. 處理方法
連接mysql庫,執(zhí)行一下語句,查看sql_mode
select @@GLOBAL.sql_mode;
2.1 臨時方法,重啟后失效
SET GLOBAL sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';
2.2 修改配置my.ini文件
在[mysqld]下面添加以下代碼
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
3. 對查詢結(jié)果中的字段應(yīng)用聚合函數(shù)
若不能修改MySQL的配置文件,或者需要在特定場景使用原始的sql_mode值,我們也可以嘗試在查詢語句中對未出現(xiàn)在GROUP BY子句中的字段應(yīng)用聚合函數(shù)來解決報錯問題。
例如:
SELECT user_id, SUM(score) FROM scores GROUP BY user_id;
該語句會報錯,因為SELECT語句中的score字段未出現(xiàn)在GROUP BY子句中。但是,我們可以嘗試使用聚合函數(shù):
SELECT user_id, MAX(score) FROM scores GROUP BY user_id;
該語句中的score字段被應(yīng)用了MAX聚合函數(shù),這樣就符合了only_full_group_by模式的要求,不會報錯。
示例
下面提供兩個具體的示例來展示如何使用上述解決方案。假設(shè)我們有如下的scores數(shù)據(jù)表:
id user_id score
1 100 88
2 100 93
3 101 73
4 102 85
5 102 91
示例1:修改sql_mode參數(shù)值
我們可以通過如下步驟來修改MySQL的sql_mode參數(shù):
打開MySQL的配置文件my.cnf或my.ini。
找到[mysqld]節(jié)點下的sql_mode參數(shù)(可能會有多個)。
將其值修改為:sql_mode=NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION。
保存文件并重啟MySQL服務(wù)。
使用如下SQL查詢語句,測試是否能正確查詢出score字段的平均值:
SELECT AVG(score) FROM scores GROUP BY user_id;
示例2:使用聚合函數(shù)
在不修改MySQL的sql_mode參數(shù)的情況下,我們可以改變查詢語句,使用聚合函數(shù)來解決only_full_group_by模式帶來的限制。
例如,下列SQL語句查詢出每個用戶的最小成績:
SELECT user_id, MIN(score) FROM scores GROUP BY user_id;
在這個查詢語句中,score字段被應(yīng)用了MIN聚合函數(shù),符合only_full_group_by模式的要求。因此可以正常執(zhí)行,并正確返回結(jié)果。
到此這篇關(guān)于mysql高版本(8.0+)group_by報錯的處理方法的文章就介紹到這了,更多相關(guān)mysql group_by報錯內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在IDEA中配置tomcat并創(chuàng)建tomcat項目的圖文教程
這篇文章主要介紹了在IDEA中配置tomcat并創(chuàng)建tomcat項目的圖文教程,需要的朋友可以參考下2020-07-07
java中double強制轉(zhuǎn)換int引發(fā)的OOM問題記錄
這篇文章主要介紹了java中double強制轉(zhuǎn)換int引發(fā)的OOM問題記錄,本文給大家分享問題排查過程,感興趣的朋友跟隨小編一起看看吧2024-10-10
java文字轉(zhuǎn)語音播報功能的實現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于java文字轉(zhuǎn)語音播報功能的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07

