含巢狀子查詢的 CTE
如果你在 FROM 子句裡列出多個帶巢狀語句的子查詢,查詢很可能會變得冗長、複雜,而且難以閱讀。
由於許多查詢是打算儲存並在未來重複執行,妥善的結構化對順暢的工作流程至關重要。把子查詢整理成 CTE,長期下來能為你省下時間、版面,並減少混淆!
本練習屬於課程
SQL 資料操作
練習說明
- 宣告一個 CTE,用來計算
'2013/2014'賽季中 8 月比賽的總進球數。 - 在內層子查詢中篩選,只選取
'2013/2014'賽季 8 月的比賽。 - 使用
match_listCTE 的country_id,將該 CTELEFT JOIN到 league 資料表。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
-- Set up your CTE
___ match_list ___ (
SELECT
country_id,
(home_goal + away_goal) AS goals
FROM match
-- Create a list of match IDs to filter data in the CTE
WHERE id IN (
SELECT ___
FROM ___
WHERE season = ___ AND EXTRACT(MONTH FROM ___) = ___))
-- Select the league name and average of goals in the CTE
SELECT
___,
___(___)
FROM league AS l
-- Join the CTE onto the league table using country_id
LEFT JOIN ___ ON l.id = match_list.___
GROUP BY l.name;