Kết hợp các CTE lại với nhau
Giờ bạn đã tạo xong hai truy vấn con để xác định đối thủ sân nhà và sân khách, hãy sắp xếp lại truy vấn của bạn với hai truy vấn con home và away dưới dạng Common Table Expressions (CTE). Bạn sẽ thấy truy vấn chính có cụm SELECT DISTINCT. Nếu không chỉ lấy các trận đấu DISTINCT, bạn có thể trả về bản ghi trùng lặp cho mỗi trận đã chơi.
Tiếp tục xây dựng truy vấn để trích xuất tất cả các trận Manchester United đã chơi trong mùa 2014/2015.
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
- Khai báo các CTE
homevàawaytrước truy vấn chính. - Nối (join) các CTE với bảng match bằng
LEFT JOIN. - Chọn dữ liệu liên quan từ các CTE vào truy vấn chính.
- Trong truy vấn chính, chọn ngày từ
match, tên đội từ các CTE, và số bàn thắng sân nhà/sân khách từmatch.
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 the date, team names and goals
SELECT DISTINCT
___.___,
___.___ AS home_team_name,
___.___ AS away_team_name,
___.___,
m.away_goal
-- 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'
OR away.team_long_name = 'Manchester United');