首頁 > 資料庫 > mysql教程 > 可以在沒有 GROUP BY 子句的 SQL 中使用 HAVING 嗎?

可以在沒有 GROUP BY 子句的 SQL 中使用 HAVING 嗎?

Susan Sarandon
發布: 2024-12-29 18:12:10
原創
999 人瀏覽過

Can HAVING be Used in SQL Without a GROUP BY Clause?

HAVING 子句可以在沒有 GROUP BY 子句的情況下使用嗎?

SQL 標準概述了使用 HAVING 子句的具體標準,其中包括引用功能上依賴 GROUP BY 子句或外部引用的欄位。然而,所提供的查詢提出了是否可以在沒有 GROUP BY 的情況下使用 HAVING 的問題。

標準 SQL 規範

依標準,不帶 GROUP BY 的 HAVING 子句沒有明確禁止 GROUP BY 子句。但是,此查詢表現出可疑的行為:

SELECT *
FROM Book
HAVING NumberOfPages = MAX(NumberOfPages)
登入後複製

此查詢在 HAVING 子句中使用聚合函數 (MAX),但它不指示應選擇哪個特定行。因此,它的行為並沒有嚴格地由標準定義。

MySQL 實作

MySQL 將此查詢解釋為好像存在隱式 GROUP BY 子句,僅選擇行具有最大 NumberOfPages 值。此行為不符合標準。

不符合標準的原因

標準要求 HAVING 子句對 GROUP BY 子句定義的行組進行操作。其目的是根據聚合值過濾掉群組。使用不含 GROUP BY 的 HAVING 會允許對任意條件進行過濾,可能會導致意外結果。

有效的標準SQL 查詢

使用不帶GROUP BY 的HAVING 的有效標準SQL 查詢將為:

SELECT 'T' AS result
FROM Book
HAVING MIN(NumberOfPages) < MAX(NumberOfPages);
登入後複製
此查詢檢查最小NumberOfPages 值是否小於最大值值,如果為true,則傳回結果為「T」的單行;如果為false,則傳回空集合。此行為符合 HAVING 適用於在整個表上操作的聚合函數的標準要求。

以上是可以在沒有 GROUP BY 子句的 SQL 中使用 HAVING 嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板