นับจำนวนรุ่น (Generation)
ในแบบฝึกหัดนี้ เราจะมาดูแผนภูมิครอบครัวแบบสุ่มกัน ชุดข้อมูล family ประกอบด้วย 3 คอลัมน์ ได้แก่ ID, name และ ParentID
โจทย์คือให้คำนวณจำนวนรุ่น (generation) โดยนับทุกรุ่นที่เริ่มต้นจากบุคคลที่มี ParentID = 101
สำหรับงานนี้ ต้องคำนวณค่า LEVEL ของ recursion ซึ่งแทนระดับปัจจุบันในลำดับชั้นของรุ่น จากนั้นนับจำนวน LEVEL ทั้งหมดโดยใช้ COUNT() โดยจำนวน level ที่นับได้คือจำนวนรุ่นทั้งหมด เช่น ถ้านับได้ 100 level หมายความว่าพบ 100 รุ่น
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Hierarchical and Recursive Queries in SQL Server
คำแนะนำการฝึกหัด
- กำหนดจุดเริ่มต้นของ recursion โดยตั้งค่า
ParentIDเป็น101 - กำหนด
LEVELให้แทนขั้นตอนปัจจุบันของ recursion - JOIN anchor member เข้ากับ CTE บน ID ของ parent และ child
- ใช้
COUNT()นับจำนวนรุ่นทั้งหมด
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
WITH children AS (
SELECT
ID,
Name,
ParentID,
0 as LEVEL
FROM family
-- Set the targeted parent as recursion start
WHERE ___ = ___
UNION ALL
SELECT
child.ID,
child.NAME,
child.ParentID,
-- Increment LEVEL by 1 each step
___ + ___
FROM family child
INNER JOIN children
-- Join the anchor query with the CTE
ON child.___ = children.___)
SELECT
-- Count the number of generations
___(___) as Generations
FROM children
OPTION(MAXRECURSION 300);