Thêm một window function
Tuyệt vời! Giờ bạn đã có một tập kết quả truy xuất ngày thi đấu, đội chủ nhà, đội khách, và số bàn thắng của mỗi đội. Bạn còn một phần cuối của câu hỏi — Manchester United thua đậm thế nào ở mỗi trận?
Để xác định điều này, hãy thêm một window function vào truy vấn chính để xếp hạng các trận theo giá trị tuyệt đối của chênh lệch giữa home_goal và away_goal. Cách này cho phép bạn so sánh trực tiếp chênh lệch tỷ số mà không cần quan tâm Manchester United đá sân nhà hay sân khách!
Biểu thức đã được viết sẵn — bạn chỉ cần hoàn thiện đúng window function là xong!
Bài tập này là một phần của khóa học
Xử lý dữ liệu trong SQL
Hướng dẫn bài tập
- Thiết lập các CTE để đội nhà và đội khách đều có tên, ID, và số bàn thắng tương ứng.
- Chọn
date,home team name,away team name,home goals, vàaway goalstrong truy vấn chính. - Xếp hạng các trận và sắp xếp theo chênh lệch tỷ số theo thứ tự giảm dần.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
-- Set up the home team CTE
___ ___ ___ (
SELECT m.id, t.team_long_name,
CASE WHEN m.home_goal > m.away_goal THEN 'MU Win'
WHEN m.home_goal < m.away_goal THEN 'MU Loss'
ELSE 'Tie' END AS outcome
FROM match AS m
LEFT JOIN team AS t ON m.hometeam_id = t.team_api_id),
-- Set up the away team CTE
___ ___ (
SELECT m.id, t.team_long_name,
CASE WHEN m.home_goal > m.away_goal THEN 'MU Loss'
WHEN m.home_goal < m.away_goal THEN 'MU Win'
ELSE 'Tie' END AS outcome
FROM match AS m
LEFT JOIN team AS t ON m.awayteam_id = t.team_api_id)
-- Select columns and and rank the matches by goal difference
SELECT DISTINCT
___,
___.___ AS home_team,
___.___ AS away_team,
m.home_goal, m.away_goal,
___() ___(___ ___ ABS(home_goal - away_goal) ___) as match_rank
-- Join the CTEs onto the match table
FROM match AS m
___ JOIN ___ ON m.id = ___
___ JOIN ___ ON m.id = ___
WHERE m.season = '2014/2015'
AND ((home.team_long_name = 'Manchester United' AND home.outcome = 'MU Loss')
OR (away.team_long_name = 'Manchester United' AND away.outcome = 'MU Loss'));