MySQL 聚合函數:GROUP BY 困境
在MySQL 中,聚合函數可以在SELECT 語句中使用,而無需明確定義GRO BY子句,而SQL Server 等其他資料庫系統可能會拋出錯誤。這種行為引發了為什麼 MySQL 允許執行此類查詢的問題。
MySQL 設計
MySQL 允許 SELECT 清單中的聚合函數不帶 GROUP BY 子句作為擴充符合 SQL 標準。如果沒有分組,資料庫會假定一個不確定的群組,並且可以為該群組選擇任何名稱值。此行為可以更輕鬆地聚合整個表中的資料。
範例查詢
考慮查詢:
SELECT name, MAX(age) FROM t;
沒有GROUP BY子句中,MySQL 傳回單一行,其中包含整個資料表中遇到的第一個名稱值和最大年齡值。
ONLY_FULL_GROUP_BY 設定
MySQL 版本 5.7.5 及更高版本引入了 ONLY_FULL_GROUP_BY 設定,該設定控制不帶 GROUP 子句的聚合函數的處理。啟用此設定要求任何聚合函數使用都存在 GROUP BY 子句。
結論
MySQL 允許不使用 GROUP BY 子句的聚合函數的行為為以下操作提供了彈性:聚合整個表的資料。但是,ONLY_FULL_GROUP_BY 設定可以強制更嚴格地遵守 SQL 標準,以實現更受控的聚合。
以上是為什麼MySQL聚合函數可以在沒有GROUP BY子句的情況下使用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!