จัดระเบียบโค้ดด้วย CTE
ในบทที่ 2 คุณได้สร้างรายการประเทศพร้อมจำนวนแมตช์ในแต่ละประเทศที่มีประตูรวมมากกว่า 10 ประตู คิวรีนั้นใช้ subquery ใน statement FROM เพื่อกรองแมตช์ก่อนที่จะนับในคิวรีหลัก ดังนี้:
SELECT
c.name AS country,
COUNT(sub.id) AS matches
FROM country AS c
INNER JOIN (
SELECT country_id, id
FROM match
WHERE (home_goal + away_goal) >= 10) AS sub
ON c.id = sub.country_id
GROUP BY country;
คุณสามารถกำหนด subquery หนึ่งรายการขึ้นไปเป็น common table expressions (CTEs) ได้ โดยประกาศไว้ก่อนคิวรีหลัก ซึ่งเป็นเครื่องมือที่ดีในการจัดระเบียบข้อมูลและเรียงลำดับตรรกะให้ชัดเจน
ในแบบฝึกหัดนี้ ลองเขียนคิวรีในลักษณะเดียวกันโดยใช้ CTE
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การจัดการข้อมูลใน SQL
คำแนะนำการฝึกหัด
- เติมโค้ดให้ครบเพื่อประกาศ CTE
- เลือก
country_idและidของแมตช์จากตารางmatchใน CTE - ใช้
LEFT JOINเชื่อม CTE กับตาราง league โดยใช้country_id
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
-- Set up your CTE
___ match_list ___ (
SELECT
country_id,
___
FROM match
WHERE (home_goal + away_goal) >= 10)
-- Select league name and count of matches from the CTE
SELECT
l.name AS league,
COUNT(match_list.id) AS matches
FROM league AS l
-- Join the CTE to the league table using country_id
LEFT JOIN ___ ON l.id = ___
GROUP BY l.name;