MySQL報(bào)錯(cuò)Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre
解決MySQL5.7版本之后使用GROUP BY語(yǔ)句時(shí)報(bào)錯(cuò)
今天使用mysql簡(jiǎn)單的一句分組查詢語(yǔ)句(GROUP BY)報(bào)錯(cuò)了。
mysql> SELECT * FROM tb GROUP BY empid;
ERROR 1055 (42000): Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'db1.tb.sales' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

查了問(wèn)題原因和解決方法,成功解決。
問(wèn)題原因
原因:
- 使用GROUP BY 語(yǔ)句違背了sql_mode=only_full_group_by。
- 因?yàn)閙ysql版本5.7之后默認(rèn)的模式是ONLY_FULL_GROUP_BY。
官網(wǎng)文檔的原話:

說(shuō)人話,大概意思就是說(shuō)(使用google翻譯):
拒絕選擇列表、HAVING 條件或 ORDER BY 列表引用非聚合列的查詢,這些列既不在 GROUP BY 子句中命名,也不在功能上依賴于(唯一確定的)GROUP BY 列。
從 MySQL 5.7.5 開(kāi)始,默認(rèn) SQL 模式包括 ONLY_FULL_GROUP_BY。(在 5.7.5 之前,MySQL 不檢測(cè)函數(shù)依賴,并且默認(rèn)不啟用 ONLY_FULL_GROUP_BY。有關(guān) 5.7.5 之前的行為的描述,請(qǐng)參閱 MySQL 5.6 參考手冊(cè)。)
標(biāo)準(zhǔn) SQL 的 MySQL 擴(kuò)展允許在 HAVING 子句中引用選擇列表中的別名表達(dá)式。 在 MySQL 5.7.5 之前,啟用 ONLY_FULL_GROUP_BY 會(huì)禁用此擴(kuò)展,因此需要使用非別名表達(dá)式編寫(xiě) HAVING 子句。 從 MySQL 5.7.5 開(kāi)始,此限制被取消,因此 HAVING 子句可以引用別名,無(wú)論是否啟用了 ONLY_FULL_GROUP_BY。
解決方法
1、先使用SQL查詢sql_mode
select @@global.sql_mode
2、重新設(shè)置sql_mode,刪除ONLY_FULL_GROUP_BY
set @@global.sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
3、退出重進(jìn)
# 退出 quit # 再次登錄(命令行模式) mysql -u root -p
再次執(zhí)行查詢語(yǔ)句,
SELECT * FROM tb GROUP BY empid;

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
一文帶你永久擺脫Mysql時(shí)區(qū)錯(cuò)誤問(wèn)題(idea數(shù)據(jù)庫(kù)可視化插件配置)
在MySQL啟動(dòng)時(shí)會(huì)檢查當(dāng)前系統(tǒng)的時(shí)區(qū)并根據(jù)系統(tǒng)時(shí)區(qū)設(shè)置全局參數(shù)system_time_zone的值,下面這篇文章主要給大家介紹了關(guān)于如何永久擺脫Mysql時(shí)區(qū)錯(cuò)誤問(wèn)題(idea數(shù)據(jù)庫(kù)可視化插件配置)的相關(guān)資料,需要的朋友可以參考下2022-08-08
mysql容器之間的replication配置實(shí)例詳解
這篇文章主要給大家介紹了關(guān)于mysql容器之間replication配置的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01

