Menghitung agregat terfilter
Jika kita ingin menghitung jumlah kemunculan suatu kejadian berdasarkan kriteria filter tertentu, kita dapat memanfaatkan fungsi agregasi seperti SUM(), MIN(), dan MAX(), serta ekspresi CASE. Sebagai contoh, SUM(CASE WHEN ir.IncidentTypeID = 1 THEN 1 ELSE 0 END) akan mengembalikan jumlah insiden yang terkait dengan jenis insiden 1. Jika Anda menyertakan satu pernyataan SUM() untuk setiap jenis insiden, Anda telah melakukan pivot pada himpunan data berdasarkan ID jenis insiden.
Dalam skenario ini, manajemen ingin kita memberi tahu mereka, per jenis insiden, berapa banyak hari dengan "insiden-besar" dibandingkan dengan hari "insiden-kecil" yang telah terjadi. Manajemen mendefinisikan hari insiden-besar sebagai hari dengan lebih dari 5 kejadian dari jenis insiden yang sama pada hari yang sama, dan hari insiden-kecil memiliki antara 1 hingga 5 kejadian.
Latihan ini merupakan bagian dari kursus
Analisis Deret Waktu di SQL Server
Instruksi latihan
- Lengkapi ekspresi
CASEyang memungkinkan kita menggunakan fungsiSUM()untuk menghitung jumlah hari insiden-besar dan insiden-kecil. - Dalam ekspresi
CASE, Anda harus mengembalikan 1 jika kriteria filter yang sesuai terpenuhi dan 0 jika tidak. - Pastikan untuk menyertakan alias saat mereferensikan kolom, seperti
ir.IncidentDateatauit.IncidentType!
Latihan interaktif langsung praktik
Cobalah latihan ini dengan melengkapi kode contoh ini.
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;