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中文網其他相關文章!