Subqueries 無所不在
在足球聯賽中,賽事會分成不同的「階段」。獲勝的球隊會從一個階段晉級到下一個階段,直到進入決賽。在每個階段,勝負的重要性都會比前一個更高。match 資料表包含每場比賽所處不同階段的相關資料。
接下來的 3 個練習中,你將建立一個查詢,並在 SELECT、FROM 與 WHERE 子句各放入一個子查詢。當賽事從一個階段進入下一個階段、重要性提升時,場均進球數會改變嗎?
這個查詢會重複使用同一個子查詢,好讓你練習不同的放置位置。每個複本都會再次讀取 match 資料表,因此在實務上,你會只計算一次整體平均,如第 4 章使用視窗函式所示。
本練習屬於課程
SQL 資料操作
練習說明
- 在
SELECT子查詢中取出總進球數的平均值。 - 在主查詢中計算特定
stage的「平均」總進球數。 - 將兩個子查詢與主查詢都「過濾」為只包含 2012/2013 賽季的資料。
- 以
m.stage欄位對查詢進行GROUP。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
SELECT
-- Select the stage and average goals for each stage
m.stage,
ROUND(___(___ + m.away_goal),2) AS avg_goals,
-- Select the average overall goals for the 2012/2013 season
ROUND((SELECT ___(___ + away_goal)
FROM match
WHERE season = ___),2) AS overall
FROM match AS m
-- Filter for the 2012/2013 season
WHERE ___ = ___
-- Group by stage
GROUP BY ___;