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

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

Susan Sarandon
Susan Sarandon原創
2024-12-21 00:32:16639瀏覽

Why Can't I Use an Aggregate Alias in a SQL HAVING Clause?

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

考慮以下 SQL 語句:

此程式碼產生一個錯誤,指示「col7」是無效的欄位名稱。為什麼會這樣呢?

原因在於SQL語句的執行順序。 HAVING 子句在 SELECT 子句之前計算。這表示當計算 HAVING 子句時,聚合函數 count(col2) 的別名「col7」尚未定義。

SQL 依照下列順序執行查詢:

  1. 計算FROM子句中指定的所有資料表的笛卡爾積。
  2. 依照WHERE過濾行子句。
  3. 依照 GROUP BY 子句分組。
  4. 依照 HAVING 子句過濾群組。
  5. 計算 SELECT 子句目標清單中的運算式。
  6. 如果指定了 DISTINCT,則刪除重複行。
  7. 如果有任何子選擇,則執行並集
  8. 根據 ORDER BY 子句對行進行排序。
  9. 應用 TOP 子句(如果存在)。

因此,在給定的程式碼中,HAVING子句嘗試在 SELECT 子句中定義別名「col7」之前使用它。要解決此問題,您可以將“col7”替換為聚合函數本身:

這允許 HAVING 子句正確計算 col2 的聚合計數。

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

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