เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

เพิ่ม Window Function

ยอดเยี่ยมมาก! ตอนนี้ได้ผลลัพธ์ที่แสดงวันที่แข่ง ทีมเหย้า ทีมเยือน และจำนวนประตูของแต่ละทีมแล้ว เหลืออีกหนึ่งส่วนสุดท้ายของคำถาม -- แมนเชสเตอร์ ยูไนเต็ดแพ้หนักแค่ไหนในแต่ละนัด?

เพื่อหาคำตอบ เราจะเพิ่ม window function ในคิวรีหลัก โดยจัดอันดับแต่ละแมตช์ตาม ค่าสัมบูรณ์ ของผลต่างระหว่าง home_goal กับ away_goal วิธีนี้ช่วยให้เปรียบเทียบความห่างของคะแนนได้โดยตรง โดยไม่ต้องสนใจว่าแมนเชสเตอร์ ยูไนเต็ดเล่นในฐานะทีมเหย้าหรือทีมเยือน!

สมการถูกเตรียมไว้ให้แล้ว สิ่งที่ต้องทำคือเติม window function ให้สมบูรณ์

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

การจัดการข้อมูลใน SQL

ดูคอร์ส

คำแนะนำการฝึกหัด

  • กำหนด CTE ให้ทีมเหย้าและทีมเยือนแต่ละทีมมีชื่อ ID และคะแนนของตัวเอง
  • เลือก date, ชื่อทีมเหย้า, ชื่อทีมเยือน, จำนวนประตูทีมเหย้า และจำนวนประตูทีมเยือน ในคิวรีหลัก
  • จัดอันดับแมตช์และเรียงตามผลต่างของคะแนนในลำดับ จากมากไปน้อย

แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ

ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์

-- 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'));
แก้ไขและรันโค้ด