SQL Server'da ortanca hesaplama
SQL Server'da MEDIAN() işlevi yok. En yakını, bir veri kümesi boyunca n'inci yüzdelikteki değeri bulan PERCENTILE_CONT().
Olay özet setimizde, olay türüne göre ortancanın ortalamadan ne kadar saptığını bulmak istiyoruz. Bunu yapmak için, önceki egzersizdeki AVG() işlevini PERCENTILE_CONT() ile karşılaştırabiliriz. Bunlar pencere (window) işlevleridir; bunları 4. bölümde daha ayrıntılı ele alacağız. Şimdilik bilmen gereken, PERCENTILE_CONT()'un bir parametre aldığıdır: yüzdelik (0 ile 1 arasında ondalık). Yüzdelik, WITHIN GROUP cümleciği içinde sıralanmış bir grup kapsamında olmalı ve veriyi bölümlendirmen gerekiyorsa belirli bir aralık üzerinde OVER ile belirtilmelidir. WITHIN GROUP bölümünde, 50. yüzdeliğini istediğimiz sütuna göre sıralama yapmamız gerekir.
Bu egzersiz, kursun bir parçasıdır
SQL Server'da Zaman Serisi Analizi
Egzersiz talimatları
PERCENTILE_CONT()için eksik değeri doldur.WITHIN GROUP()cümleciğinde, olay sayısına göre azalan sıralama yap.OVER()cümleciğinde,IncidentType(gerçek metin değeri, kimlik numarası değil) ile bölümlendir.
Uygulamalı etkileşimli egzersiz
Bu egzersizi bu örnek kodu tamamlayarak deneyin.
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;