開始使用免費開始

用 CTE 整理查詢

在第 2 章中,你產生了一份清單,列出各國家中總進球數超過 10 球的比賽數量。那個練習中的查詢在 FROM 子句裡使用了子查詢,先過濾比賽,再在主查詢中計數。以下是你所建立的查詢:

SELECT
  c.name AS country,
  COUNT(sub.id) AS matches
FROM country AS c
INNER JOIN (
  SELECT country_id, id 
  FROM match
  WHERE (home_goal + away_goal) >= 10) AS sub
ON c.id = sub.country_id
GROUP BY country;

你可以在主查詢之前先「宣告」一個(或多個)子查詢作為共同資料表運算式(CTE),這是組織資訊並依照邏輯順序安排的絕佳工具。

在本練習中,我們用 CTE 來重寫一個類似的查詢。

本練習屬於課程

SQL 資料操作

檢視課程

練習說明

  • 完成語法以宣告你的 CTE。
  • 在 CTE 中,從 match 資料表選取 country_id 和比賽 id
  • 使用 country_id 將 CTE LEFT JOIN 到 league 資料表。

動手互動練習

試著完成這個範例程式碼,體驗一下這個練習。

-- Set up your CTE
___ match_list ___ (
    SELECT 
  		country_id, 
  		___
    FROM match
    WHERE (home_goal + away_goal) >= 10)
-- Select league name and count of matches from the CTE
SELECT
    l.name AS league,
    COUNT(match_list.id) AS matches
FROM league AS l
-- Join the CTE to the league table using country_id
LEFT JOIN ___ ON l.id = ___
GROUP BY l.name;
編輯並執行程式碼