การใช้ CASE และ AVG เพื่อคำนวณสัดส่วน
CASE statement สามารถคืนค่าใดก็ได้ที่ระบุไว้ใน THEN clause ซึ่งเป็นเครื่องมือที่ทรงพลังมากสำหรับการคำนวณและการจัดการข้อมูลที่ซับซ้อน โดยเฉพาะเมื่อใช้ร่วมกับฟังก์ชัน aggregate หนึ่งในสิ่งที่ทำได้คือการใช้ CASE ภายใน AVG เพื่อคำนวณสัดส่วนของข้อมูลในฐานข้อมูล
นี่คือตัวอย่างการตั้งค่า:
AVG(CASE WHEN condition_is_met THEN 1
WHEN condition_is_not_met THEN 0 END)
วิธีนี้ต้องระบุให้ชัดเจนว่าระเบียนใดนับเป็น 0 มิฉะนั้นผลการคำนวณอาจคลาดเคลื่อนได้
ในแบบฝึกหัดนี้ให้ตรวจสอบจำนวนการชนะ การแพ้ และการเสมอในแต่ละประเทศ โดยตาราง matches ถูกกรองให้แสดงเฉพาะแมตช์จากฤดูกาล 2013/2014 และ 2014/2015
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การจัดการข้อมูลใน SQL
คำแนะนำการฝึกหัด
- ภายในฟังก์ชัน
AVG()ให้เติมCASEstatement โดยตรวจสอบว่าm.home_goalไม่เท่ากับm.away_goalหรือไม่ และกำหนดค่า0หากเงื่อนไขนี้เป็นจริง - ทำซ้ำกระบวนการเดิมเพื่อเปรียบเทียบประตูเหย้าและประตูเยือนในฤดูกาล
'2014/2015'พร้อม alias ว่าties_2014_2015
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
SELECT
c.name AS country,
-- Calculate the fraction of tied games in each season
___(___ ___ m.season='2013/2014' AND m.home_goal = m.away_goal THEN 1
WHEN m.season='2013/2014' AND m.home_goal ___ m.away_goal THEN ___
END) AS ties_2013_2014,
___(___ ___ m.season='2014/2015' ___ ___ = ___ ___ ___
WHEN m.season='2014/2015' ___ m.home_goal != m.away_goal THEN ___
___) AS ___
FROM country AS c
LEFT JOIN matches AS m
ON c.id = m.country_id
GROUP BY country;