[英]SQL Order of Operations - GROUP BY using field created in SELECT
我無法圍繞一個相當基本的概念進行思考。 任何幫助表示贊賞! 我從這樣的資源中了解到SQL操作的處理順序是:
1) from 2) where 3) group by 4) have 5) select 6) order by 7) limit
但是,在查看來自 DataCamp 的以下查詢時,我感到困惑。 如果 SQL 在 SELECT 之前處理 GROUP BY,我如何使用在 SELECT 語句 (home_team) 中的 GROUP BY 子句中創建的字段?
謝謝!
-- Identify the home team as Bayern Munich, Schalke 04, or neither
SELECT
CASE WHEN hometeam_id = 10189 THEN 'FC Schalke 04'
WHEN hometeam_id = 9823 THEN 'FC Bayern Munich'
ELSE 'Other' END AS home_team,
COUNT(id) AS total_matches
FROM matches_germany
-- Group by the CASE statement alias
GROUP BY home_team;
您的特定查詢具有:
GROUP BY hometeam_id
---------^
這是原始數據中的一列,而不是SELECT
。 數據在hometeam_id
級別聚合。 然后在聚合之后應用CASE
表達式。
您的問題假設查詢是使用以下內容編寫的:
GROUP BY home_team
這可能會也可能不會起作用,具體取決於數據庫。
SQL 沒有“處理順序”。 SQL 引擎分析查詢並開發一個有向無環圖 (DAG),表示需要對數據執行的操作。
您正在考慮的是 SQL 中標識符范圍的規則。 最大的問題是在哪里可以使用SELECT
定義的別名。
基本上沒有數據庫允許在以下子句中使用列別名:
SELECT
FROM
WHERE
所有數據庫都允許在以下子句中使用列別名:
ORDER BY
。 某些數據庫允許在GROUP BY
和HAVING
子句中使用列別名。
您的數據庫似乎允許在GROUP BY
中進行此類使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.