HAVING 不帶GROUP BY
根據SQL 標準,HAVING 子句通常與GROUP BY 子句結合使用來過濾組基於對這些群組執行的聚合計算的行數。然而,某些資料庫系統允許在不使用 GROUP BY 的情況下使用 HAVING 子句。
問題:
是否可以依照下列條件使用不含 GROUP BY 的 HAVING 子句SQL標準?
答案:
是的,可以在標準 SQL 中使用不含 GROUP BY 的 HAVING 子句。但是,此類查詢的行為因所使用的資料庫系統而異。
MySQL 行為:
在MySQL 中,允許使用不含GROUP BY 的HAVING 子句,前提是結果集的第一行具有聚合列的最大值。此行為背離了 SQL 標準,該標準通常需要在存在 HAVING 子句的情況下使用 GROUP BY 子句。
SQL 標準解釋:
SQL 標準定義了一個HAVING 子句作用於根據 GROUP BY 子句產生的結果集計算的聚合。如果沒有 GROUP BY 子句,就不清楚 HAVING 子句引用了哪些行。
因此,根據 SQL 標準,沒有 GROUP BY 的 HAVING 子句並不嚴格有效。但是,出於相容性原因,某些資料庫系統(例如 MySQL)可能允許此類查詢。
有效標準SQL 範例:
SELECT 'T' AS result FROM Book HAVING MIN(NumberOfPages) < MAX(NumberOfPages);
此查詢是有效標準SQL如果有不同數量的書籍,則會傳回一行,其中一列包含值「T 」
結論:
雖然在某些情況下使用不帶GROUP BY 的HAVING 子句可能很方便,但需要注意的是,此類查詢的行為並不標準化,並且可能因資料庫系統而異。為了可靠的跨資料庫相容性,建議在過濾聚合計算時結合使用 GROUP BY 和 HAVING。
以上是標準 SQL 中可以在沒有 GROUP BY 子句的情況下使用 HAVING 子句嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!