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

การคำนวณค่ารวมแบบมีเงื่อนไข

หากต้องการนับจำนวนครั้งที่เหตุการณ์เกิดขึ้นตามเงื่อนไขที่กำหนด สามารถใช้ฟังก์ชัน 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;
แก้ไขและรันโค้ด