group by 引發的錯誤

alongsuotaopaole發表於2020-02-26

事情起因

今天在做一個汽車百公里加速排行榜的時候,遇到了一個錯誤,因為用到了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 函式中,反過來卻是非必須的

解決方案

  1. 剔除 select 語句中的多餘欄位,不觸發 only_full_group_by

  2. 使用 any_value() 函式來包裝值

  3. 關閉 sql_mode=ONLY_FULL_GROUP_BY。在配置檔案 my.cnf 中關閉 sql_mode=ONLY_FULL_GROUP_BY

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章