全部產品
Search
文件中心

ApsaraDB RDS:MySQL提示:1055 (42000): SELECT list is not in GROUP BY clause and contains nonaggregated column

更新時間:Mar 20, 2025

問題現象

在執行MySQL命令進行查詢時,提示如下錯誤:

1055(42000): SELECT list is not in GROUP BY clause and contains nonaggregated column

原因與解決方案

該報錯主要是因為sql_mode參數被修改導致:

原因一:使用者修改sql_mode參數導致GROUP BY的文法不合規

  • 原因:使用者修改了sql_mode參數,添加了ONLY_FULL_GROUP_BY條件,導致GROUP BY的文法不符合規範。

  • 解決方案:登入RDS控制台,選擇地區與執行個體,在執行個體詳情頁的參數設定頁面,修改sql_mode參數取值,去掉ONLY_FULL_GROUP_BY條件,忽略GROUP BY的嚴格檢查。詳見設定執行個體參數

原因二:業務側驅動程式修改sql_mode參數導致GROUP BY報錯

  • 原因:業務側使用的驅動程式修改了sql_mode參數值。例如,業務側使用的ADO.NET驅動程式修改了sql_mode參數值,導致GROUP BY報錯。現象如上圖所示,當執行的INSERT語句需要返回自增列的值時,驅動程式會在執行INSERT語句前,自動修改當前會話上的sql_mode參數值,並且不會在INSERT語句執行完之後將sql_mode恢複為原參數值。如果當前會話被繼續使用,會導致後續執行包含GROUP BY的SELECT語句時出現報錯。

  • 解決方案:如果使用了ADO.NET驅動程式,需要使用者在驅動程式執行INSERT語句之後且執行查詢之前,在業務側代碼中,增加修改sql_mode參數的語句(代碼如下),將sql_mode參數修改為預設值。

    SET session sql_mode = default;