Filtrelenmiş toplamları hesaplama
Belirli filtre ölçütlerine göre bir olayın kaç kez gerçekleştiğini saymak istiyorsak, SUM(), MIN() ve MAX() gibi toplama fonksiyonlarından ve CASE ifadelerinden yararlanabiliriz. Örneğin, SUM(CASE WHEN ir.IncidentTypeID = 1 THEN 1 ELSE 0 END) ifadesi, olay türü 1 ile ilişkili olayların sayısını döndürür. Her olay türü için bir SUM() ifadesi eklersen, veri kümesini olay türü ID'sine göre pivotlamış olursun.
Bu senaryoda, yönetim bizden olay türüne göre kaç "büyük olay" günü ve kaç "küçük olay" günü yaşadığımızı söylememizi istiyor. Yönetim, aynı gün içinde aynı olay türünden 5'ten fazla gerçekleşmesini büyük olay günü, 1 ile 5 arası gerçekleşmesini ise küçük olay günü olarak tanımlıyor.
Bu egzersiz, kursun bir parçasıdır
SQL Server'da Zaman Serisi Analizi
Egzersiz talimatları
SUM()fonksiyonunu kullanarak büyük olay günü ve küçük olay günü sayılarını hesaplamamıza imkan veren birCASEifadesi doldur.CASEifadesinde, uygun filtre ölçütü sağlanıyorsa 1, aksi halde 0 döndürmelisin.- Bir sütuna başvururken mutlaka takma adını belirt, örneğin
ir.IncidentDateveyait.IncidentTypegibi!
Uygulamalı etkileşimli egzersiz
Bu egzersizi bu örnek kodu tamamlayarak deneyin.
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;