計算篩選後的彙總值
當你想在特定篩選條件下計算事件發生次數時,可以善用 SUM()、MIN()、MAX() 等彙總函式,以及 CASE 表達式。例如,SUM(CASE WHEN ir.IncidentTypeID = 1 THEN 1 ELSE 0 END) 會回傳事件類型 1 的事故次數。若你為每個事件類型各寫一個 SUM(),就等於依事件類型 ID 將資料集做了樞紐轉換。
在這個情境中,管理階層希望我們依事件類型,說明曾經出現多少「大量事故」日與「少量事故」日。管理階層將同一天內同一事件類型發生次數超過 5 次定義為大量事故日;而發生 1 到 5 次則為少量事故日。
本練習屬於課程
SQL Server 的時間序列分析
練習說明
- 填入一個
CASE表達式,讓我們能用SUM()計算大量事故日與少量事故日的天數。 - 在
CASE表達式中,若符合相應的篩選條件就回傳 1,否則回傳 0。 - 參照欄位時務必加上別名,例如
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;