沒有 GROUP BY 的 MySQL 聚合函數:為什麼以及如何?
與其他關係型資料庫管理系統 (RDBMS) 不同,當聚合函數出現在不帶 GROUP BY 子句的 SELECT 清單中,MySQL 允許這樣做。這種行為引起了開發人員的興趣,導致了以下查詢:
為什麼 MySQL 允許不使用 GROUP BY 的聚合函數?
答案:
MySQL 的設計理念允許超出 SQL 標準的擴充功能。允許不帶 GROUP BY 的聚合函數就是這樣的一個擴充。
當執行像SELECT col1,col2,sum(col3) FROM tbl1 這樣的查詢時,MySQL 有效地按所有非聚合列對行進行分組(在此案例,第1 列和第2 列) 。然後,它會傳回單一不確定組的聚合函數(col3 的總和)的結果。
早期版本的 MySQL 預設允許此行為。然而,從 MySQL 5.7.5 開始,引入了 ONLY_FULL_GROUP_BY SQL 模式,以強制執行更嚴格的 SQL 合規性,並不允許使用沒有 GROUP BY 的聚合函數進行查詢。可以根據需要啟用或停用此模式。預設情況下,它在 MySQL 8.0 及更高版本中啟用。
附加說明:
以上是沒有 GROUP BY 的 MySQL 聚合函數:為什麼以及如何?的詳細內容。更多資訊請關注PHP中文網其他相關文章!