簡體   English   中英

SQL 操作順序 - GROUP BY 使用在 SELECT 中創建的字段

[英]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 BYHAVING子句中使用列別名。

您的數據庫似乎允許在GROUP BY中進行此類使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM