這裡的 OVER 是什麼?
視窗函式可以依你想用來排序資料的任意變數,建立一個資訊的 RANK。在設定時,你需要指定要用哪一個欄位或計算結果來產生名次。方法是在 OVER() 子句中加入 ORDER BY 子句。以下是範例:
SELECT
id,
RANK() OVER(ORDER BY home_goal) AS rank
FROM match;
在這個練習中,你會依各聯賽在一場比賽中平均進球數的高低,建立一個比賽的排名資料集,以找出哪些聯賽通常進更多球。
本練習屬於課程
SQL 資料操作
練習說明
- 從
league與match中SELECT聯賽名稱與平均總進球數。 - 完成視窗函式,計算資料庫中所有聯賽的平均進球數之
RANK()。 - 讓名次以主隊與客隊進球數總和的平均值作為
OVER的ORDER BY。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
SELECT
-- Select the league name and average goals scored
___ AS league,
___(___ + ___.away_goal) AS avg_goals,
-- Rank each league over the average goals
___ ___(___ ___ AVG(___.home_goal + ___)) AS league_rank
FROM league AS l
LEFT JOIN match AS m
ON l.id = m.country_id
WHERE m.season = '2011/2012'
GROUP BY l.name
-- Order the query by the rank you created
ORDER BY ___;