การคำนวณค่ารวมแบบมีเงื่อนไข
หากต้องการนับจำนวนครั้งที่เหตุการณ์เกิดขึ้นตามเงื่อนไขที่กำหนด สามารถใช้ฟังก์ชัน aggregate อย่าง SUM(), MIN(), และ MAX() ร่วมกับนิพจน์ CASE ได้ ตัวอย่างเช่น SUM(CASE WHEN ir.IncidentTypeID = 1 THEN 1 ELSE 0 END) จะคืนค่าจำนวนเหตุการณ์ที่เชื่อมโยงกับประเภทเหตุการณ์ที่ 1 หากเพิ่มคำสั่ง SUM() สำหรับแต่ละประเภทเหตุการณ์ ก็เท่ากับการ pivot ชุดข้อมูลตาม ID ประเภทเหตุการณ์
ในสถานการณ์นี้ ฝ่ายบริหารต้องการทราบว่าในแต่ละประเภทเหตุการณ์ มีกี่วันที่เป็น "วันเหตุการณ์ใหญ่" และกี่วันที่เป็น "วันเหตุการณ์เล็ก" โดยฝ่ายบริหารนิยามวันเหตุการณ์ใหญ่ว่าคือวันที่มีเหตุการณ์ประเภทเดียวกันเกิดขึ้นมากกว่า 5 ครั้ง และวันเหตุการณ์เล็กคือวันที่มีระหว่าง 1 ถึง 5 ครั้ง
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การวิเคราะห์อนุกรมเวลาใน SQL Server
คำแนะนำการฝึกหัด
- เติมนิพจน์
CASEเพื่อให้ฟังก์ชันSUM()สามารถคำนวณจำนวนวันเหตุการณ์ใหญ่และวันเหตุการณ์เล็กได้ - ในนิพจน์
CASEให้คืนค่า 1 เมื่อเงื่อนไขที่กำหนดเป็นจริง และ 0 ในกรณีอื่น - อย่าลืมระบุ alias เมื่ออ้างอิงคอลัมน์ เช่น
ir.IncidentDateหรือit.IncidentType
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
SELECT
it.IncidentType,
-- Fill in the appropriate expression
SUM(___ WHEN ir.NumberOfIncidents > 5 THEN ___ ELSE ___ ___) AS NumberOfBigIncidentDays,
-- Number of incidents will always be at least 1, so
-- no need to check the minimum value, just that it's
-- less than or equal to 5
SUM(___ WHEN ir.NumberOfIncidents <= 5 THEN ___ ELSE ___ ___) AS NumberOfSmallIncidentDays
FROM dbo.IncidentRollup ir
INNER JOIN dbo.IncidentType it
ON ir.IncidentTypeID = it.IncidentTypeID
WHERE
ir.IncidentDate BETWEEN '2019-08-01' AND '2019-10-31'
GROUP BY
it.IncidentType;