CTE กับ Nested Subquery
หากมี subquery หลายตัวอยู่ใน clause FROM แบบซ้อนกัน คิวรีของคุณจะยาว ซับซ้อน และอ่านยากขึ้นเรื่อย ๆ
เนื่องจากคิวรีส่วนใหญ่ถูกเขียนขึ้นเพื่อบันทึกไว้ใช้ซ้ำในอนาคต การจัดโครงสร้างที่ดีจึงเป็นสิ่งสำคัญสำหรับการทำงานที่ราบรื่น การจัดเรียง subquery ให้อยู่ในรูป CTE จะช่วยประหยัดเวลา ลดความซับซ้อน และลดความสับสนได้ในระยะยาว
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การจัดการข้อมูลใน SQL
คำแนะนำการฝึกหัด
- ประกาศ CTE ที่คำนวณยอดรวมของประตู (total goals) จากแมตช์ในเดือน สิงหาคม ของฤดูกาล
'2013/2014' - กรองผลลัพธ์ใน subquery ด้านในให้แสดงเฉพาะแมตช์ในเดือน สิงหาคม ของฤดูกาล
'2013/2014' - ใช้
LEFT JOINเพื่อเชื่อม CTE เข้ากับตาราง league โดยใช้country_idจาก CTEmatch_list
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
-- Set up your CTE
___ match_list ___ (
SELECT
country_id,
(home_goal + away_goal) AS goals
FROM match
-- Create a list of match IDs to filter data in the CTE
WHERE id IN (
SELECT ___
FROM ___
WHERE season = ___ AND EXTRACT(MONTH FROM ___) = ___))
-- Select the league name and average of goals in the CTE
SELECT
___,
___(___)
FROM league AS l
-- Join the CTE onto the league table using country_id
LEFT JOIN ___ ON l.id = match_list.___
GROUP BY l.name;