首頁 >資料庫 >mysql教程 >為什麼不能在 SQL 的 HAVING 子句中使用別名聚合?

為什麼不能在 SQL 的 HAVING 子句中使用別名聚合?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-31 17:32:10865瀏覽

Why Can't I Use Aliased Aggregates in SQL's HAVING Clause?

為什麼HAVING 子句中禁止使用別名聚合

在SQL 中,使用者在嘗試對聚合使用別名時經常會遇到錯誤HAVING 子句。這源自於 SQL 處理查詢的特定順序。

用於過濾 GROUP BY 操作結果的 HAVING 子句在 SELECT 子句之前計算。因此,在評估 HAVING 子句時,SELECT 子句中定義的別名尚不可用。

為了更好地理解這一點,讓我們考慮以下查詢執行的邏輯順序:

  1. FROM 子句中所有連接表的結果就形成了。
  2. WHERE 子句過濾掉不滿足搜尋的行
  3. 依照 GROUP BY 子句分組。
  4. 不符合 HAVING 子句條件的群組將被排除。
  5. 應用聚合函數來計算聚合值.
  6. SELECT 子句中的表達式是

由於HAVING 子句在SELECT 子句之前計算,因此它無法引用稍後在查詢中定義的別名。此限制解釋了為什麼在 HAVING 子句中使用別名(如範例所示)會導致「無效的列名」錯誤。

相反,別名在 ORDER BY 子句中起作用,因為 ORDER BY 子句是在 SELECT 子句之後評估。因此,SELECT 子句中定義的別名可在 ORDER BY 子句中使用。

以上是為什麼不能在 SQL 的 HAVING 子句中使用別名聚合?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn