Mulai sekarangMulai gratis

Menghitung median di SQL Server

Tidak ada fungsi MEDIAN() di SQL Server. Yang paling mendekati adalah PERCENTILE_CONT(), yang mencari nilai pada persentil ke-n di seluruh himpunan data.

Kita ingin mengetahui seberapa jauh median berbeda dari mean berdasarkan jenis insiden dalam himpunan ringkasan insiden kita. Untuk melakukannya, kita dapat membandingkan fungsi AVG() dari latihan sebelumnya dengan PERCENTILE_CONT(). Ini adalah fungsi jendela (window functions), yang akan kita bahas lebih rinci di bab 4. Untuk saat ini, ketahuilah bahwa PERCENTILE_CONT() menerima sebuah parameter, yaitu persentil (bilangan desimal dari 0 hingga 1). Persentil harus berada dalam kelompok berurut di dalam klausa WITHIN GROUP dan OVER rentang tertentu jika Anda perlu melakukan partition pada data. Pada bagian WITHIN GROUP, kita perlu mengurutkan berdasarkan kolom yang persentil ke-50-nya ingin kita ambil.

Latihan ini merupakan bagian dari kursus

Analisis Deret Waktu di SQL Server

Lihat Kursus

Instruksi latihan

  • Isi nilai yang hilang untuk PERCENTILE_CONT().
  • Di dalam klausa WITHIN GROUP(), urutkan berdasarkan jumlah insiden menurun.
  • Di klausa OVER(), lakukan partition berdasarkan IncidentType (nilai teks sebenarnya, bukan ID).

Latihan interaktif langsung praktik

Cobalah latihan ini dengan melengkapi kode contoh ini.

SELECT DISTINCT
	it.IncidentType,
	AVG(CAST(ir.NumberOfIncidents AS DECIMAL(4,2)))
	    OVER(PARTITION BY it.IncidentType) AS MeanNumberOfIncidents,
    --- Fill in the missing value
	PERCENTILE_CONT(___)
    	-- Inside our group, order by number of incidents DESC
    	WITHIN GROUP (ORDER BY ir.___ DESC)
        -- Do this for each IncidentType value
        OVER (PARTITION BY it.___) AS MedianNumberOfIncidents,
	COUNT(1) OVER (PARTITION BY it.IncidentType) AS NumberOfRows
FROM dbo.IncidentRollup ir
	INNER JOIN dbo.IncidentType it
		ON ir.IncidentTypeID = it.IncidentTypeID
	INNER JOIN dbo.Calendar c
		ON ir.IncidentDate = c.Date
WHERE
	c.CalendarQuarter = 2
	AND c.CalendarYear = 2020;
Edit dan Jalankan Kode