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

CTE กับ Nested Subquery

หากมี subquery หลายตัวอยู่ใน clause FROM แบบซ้อนกัน คิวรีของคุณจะยาว ซับซ้อน และอ่านยากขึ้นเรื่อย ๆ

เนื่องจากคิวรีส่วนใหญ่ถูกเขียนขึ้นเพื่อบันทึกไว้ใช้ซ้ำในอนาคต การจัดโครงสร้างที่ดีจึงเป็นสิ่งสำคัญสำหรับการทำงานที่ราบรื่น การจัดเรียง subquery ให้อยู่ในรูป CTE จะช่วยประหยัดเวลา ลดความซับซ้อน และลดความสับสนได้ในระยะยาว

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

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

ดูคอร์ส

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

  • ประกาศ CTE ที่คำนวณยอดรวมของประตู (total goals) จากแมตช์ในเดือน สิงหาคม ของฤดูกาล '2013/2014'
  • กรองผลลัพธ์ใน subquery ด้านในให้แสดงเฉพาะแมตช์ในเดือน สิงหาคม ของฤดูกาล '2013/2014'
  • ใช้ LEFT JOIN เพื่อเชื่อม CTE เข้ากับตาราง league โดยใช้ country_id จาก CTE match_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;
แก้ไขและรันโค้ด