高版本Mysql使用group by分組報錯的解決方案

Mysql5.7版本以上對group by 分組有瞭新需求,要求group by 後的字段要與select後查詢的字段一致,否則就會報錯,報錯信息如下:

#1055 – Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘id’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

通過報錯分析是由於group by 後的分組字段與查詢字段不一致導致。

解決方案:

方法一:補全group by 後字段(不推薦這種方法,有時要查詢的字段很多而且字段的內容不能保證不重復,如果全部補齊會造成查詢數據丟失)。

方法二:修改配置

1)使用navicat管理工具連接mysql數據庫

打開navicat管理工具,按F6打開命令界面,依次輸入以下語句

select @@global.sql_mode;
set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';`
set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

截圖如下:

再重新執行就會發現不再報錯。

2)使用cmd命令行更改

按win+r打開運行界面,輸入cmd打開命令行界面

打開後切換目錄到mysql安裝包的bin目錄下,具體操作如下圖(根據自己路徑切換)

連接數據庫,輸入mysql -u root -p,按回車再輸入數據庫密碼

連接成功後再依次輸入以下語句

select @@global.sql_mode;
set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

截圖如下:

至此配置結束

總結

到此這篇關於高版本Mysql使用group by分組報錯的解決方案的文章就介紹到這瞭,更多相關Mysql使用group by分組報錯內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: