นำ CTE มารวมกัน
ตอนนี้ที่สร้าง subquery สำหรับระบุทีมคู่แข่งทั้งเหย้าและเยือนแล้ว ถึงเวลาจัดระเบียบคิวรีใหม่โดยใช้ subquery home และ away ในรูปแบบ Common Table Expressions (CTEs) คิวรีหลักมีการใช้ SELECT DISTINCT ซึ่งหากไม่ระบุเฉพาะแมตช์ที่ไม่ซ้ำกัน อาจได้รับข้อมูลที่ซ้ำกันสำหรับแต่ละเกมที่เล่น
ต่อยอดการสร้างคิวรีเพื่อดึงข้อมูลแมตช์ทั้งหมดที่ Manchester United ลงเล่นในฤดูกาล 2014/2015
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การจัดการข้อมูลใน SQL
คำแนะนำการฝึกหัด
- ประกาศ CTE
homeและawayก่อนคิวรีหลัก - เชื่อม CTE เข้ากับตาราง match โดยใช้
LEFT JOIN - ดึงข้อมูลที่เกี่ยวข้องจาก CTE เข้าสู่คิวรีหลัก
- เลือกวันที่จากตาราง
matchชื่อทีมจาก CTE และจำนวนประตูเหย้า/เยือนจากตารางmatchในคิวรีหลัก
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
-- 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');