事情起因
今天在做一個汽車百公里加速排行榜的時候,遇到了一個錯誤,因為用到了group by 並且mysql版本為5.7.26,所以出現了這個錯誤。
錯誤碼
MySQL: 1055 Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column
這個錯誤意思是,查詢的欄位沒有被包含進GROUP BY 語句中。
錯誤原因
MySQL5.7以前 only_full_group_by
這個 sql_mode
,沒有強制預設。
MySQL 5.7 之後,only_full_group_by
成為 sql_mode
的預設選項之一only_full_group_by
這個 sql_mode 的唯一要求,就是
所有的select 欄位必須在 group by 欄位中,否則必須出現在 SQL Aggregate 函式中,反過來卻是非必須的
解決方案
剔除 select 語句中的多餘欄位,不觸發
only_full_group_by
。使用
any_value()
函式來包裝值關閉 sql_mode=ONLY_FULL_GROUP_BY。在配置檔案 my.cnf 中關閉 sql_mode=ONLY_FULL_GROUP_BY
本作品採用《CC 協議》,轉載必須註明作者和本文連結