Mulai sekarangMulai gratis

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

Lihat Kursus

Instruksi latihan

  • Lengkapi ekspresi CASE yang memungkinkan kita menggunakan fungsi SUM() 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.IncidentDate atau it.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;
Edit dan Jalankan Kode