首頁 >資料庫 >mysql教程 >如何解決MySQL的「不在GROUP BY」錯誤?

如何解決MySQL的「不在GROUP BY」錯誤?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-20 04:56:18397瀏覽

How to Resolve MySQL's

MySQL「不在GROUP BY 中」錯誤

當您在SELECT 子句中包含非聚合列時,會出現此錯誤使用不符合group by 要求的GROUP BY 子句的查詢。在本例中,查詢:

SELECT `name`, `type`, `language`, `code` 
FROM `users` 
WHERE `verified` = '1' 
GROUP BY `name` 
ORDER BY `count` DESC LIMIT 0, 25

會觸發錯誤,因為 GROUP BY 中不包含類型、語言和程式碼。要解決此問題,您需要將所有非聚合列按要求合併到群組中:

SELECT `name`, `type`, `language`, `code` 
FROM `users` 
WHERE `verified` = '1' 
GROUP BY `name`, `type`, `language`, `code` 
ORDER BY `count` DESC LIMIT 0, 25

SQL Group By 要求

SQL92 規定引用的每個列SELECT 子句中的聚合函數之外的內容必須包含在GROUP BY 子句中。然而,SQL99 放寬了這個要求,規定這些欄位在功能上必須依賴 group by 子句。

MySQL Group By 行為

MySQL 允許部分 group by預設值,這可能會導致不確定的結果。例如,考慮以下查詢:

create table t (x int, y int);
insert into t (x,y) values (1,1),(1,2),(1,3);
select x,y from t group by x;

此查詢可能會為每個x 組傳回隨機y 值,如以下輸出所示:

+------+------+
| x    | y    |
+------+------+
|    1 |    1 |
+------+------+

防止Partial Group By

為了防止這種不確定的行為,您可以將@@sql_mode設定為'ONLY_FULL_GROUP_BY':

set @@sql_mode='ONLY_FULL_GROUP_BY';
select x,y from t group by x; 
ERROR 1055 (42000): 'test.t.y' isn't in GROUP BY

以上是如何解決MySQL的「不在GROUP BY」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn