group by 錯誤


出現錯誤:

which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

 

SQL的grop by 語法為, 


select 選取分組中的列+聚合函數 from 表名稱 group by 分組的列 


從語法格式來看,是先有分組,再確定檢索的列,檢索的列只能在參加分組的列中選。

所以問題中的,group by 后的 a,b,c是先確定的。select后的a,b,c才是可以變的。即

以下語句都是正確的:

 

select a,b,c from table_name group by a,b,c,d;
select a,b from table_name group by a,b,c;
select a,max(a) from table_name group by a,b,c;

 

以下語句則是錯誤的:

 

select a,b,c from table_name group by a,b;
select a,b,c from table_name group by a;

 

 

一:在sql查詢語句中不需要group by的字段上使用any_value()函數

這種對於已經開發了不少功能的項目不太合適,畢竟要把原來的sql都給修改一遍

二:修改my.cnf(windows下是my.ini)配置文件,刪掉only_full_group_by這一項

若我們項目的mysql安裝在ubuntu上面,找到這個文件打開一看,里面並沒有sql_mode這一配置項,想刪都沒得刪。

當然,還有別的辦法,打開mysql命令行,執行命令

1
select @@sql_mode;

這樣就可以查出sql_mode的值,復制這個值,在my.cnf中添加配置項(把查詢到的值刪掉only_full_group_by這個選項,其他的都復制過去):

1
sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION;

如果 [mysqld] 這行被注釋掉的話記得要打開注釋。然后重重啟mysql服務

注:使用命令

1
set sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

這樣可以修改一個會話中的配置項,在其他會話中是不生效的。  

 

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM