用 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將 CTELEFT 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;