MySQL 無需聚合的 GROUP BY 查詢的獨特方法
與 Oracle 和 SQL Server 等資料庫系統不同,MySQL 允許使用不附帶聚合函數的 GROUP BY
子句。 這與標準 SQL 行為形成鮮明對比,在標準 SQL 行為中,此類查詢通常會導致錯誤。 關鍵問題是:MySQL 如何處理結果集中的非聚合列?
MySQL 從每個群組的非聚合資料列中選擇任意值。 該值通常(但並非總是)是該組中第一個遇到的值。 此行為背後的基本原理源自於這樣的假設:如果列未聚合或屬於分組的一部分,則將其包含在 SELECT
清單中可能是任意的。 因此,MySQL 只是傳回一個代表值。
ANSI 合規性與 only_full_group_by
設定
這種輕鬆的 GROUP BY
方法偏離了 ANSI SQL 標準。 MySQL 透過提供 only_full_group_by
SQL 模式來解決這個問題。啟用此模式會強制執行嚴格的 ANSI SQL 合規性,要求所有非聚合資料列都包含在 GROUP BY
子句中。 這確保了查詢結果可預測且符合標準。
為什麼 MySQL 會選擇這種方法
在 MySQL 中允許非聚合 GROUP BY
查詢的決定優先考慮效能和易用性。 正如 MySQL 5.0 手冊中所述,這種設計簡化了查詢處理,減少了計算開銷並提供了更直接的使用者體驗。 它允許高效的資料檢索,而無需明確聚合操作的複雜性。
以上是MySQL 如何處理 GROUP BY 查詢中的非聚合列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!