Tek bir sorguda birden çok toplulaştırmayı birleştir
Son üç egzersizde ROLLUP, CUBE ve GROUPING SETS gruplama işleçlerini adım adım gördük. Bu üçü arasında, GROUPING SETS en özelleştirilebilir olanıdır ve tam olarak istediğin toplulaştırma seviyelerini kurmana izin verir. GROUPING SETS, hiyerarşi hakkında hiçbir varsayımda bulunmaz ( ROLLUP'ın aksine) ve iyi sayıda sütunla yönetilebilir kalır (CUBE'un aksine).
Bu egzersizde, verilerimizle birkaç varsayımı test etmek istiyoruz:
- Kasım 2019'da eğitimi başlattığımızdan beri ay başına düşen olay sayısı azaldı.
- Salı günleri, diğer hafta içi günlerine kıyasla daha fazla olay gerçekleşiyor.
- Hafta sonları, hafta içinden daha fazla olay gerçekleşiyor.
Bu egzersiz, kursun bir parçasıdır
SQL Server'da Zaman Serisi Analizi
Egzersiz talimatları
Yukarıdaki varsayımlara göre grouping set'leri doldur. Toplam genel değere ek olarak aşağıdaki grouping set'leri görmek istiyoruz:
- Takvim yılı ve aya göre bir set
- Haftanın gününe göre bir set
- Tarihin hafta sonu olup olmadığına göre bir set
Uygulamalı etkileşimli egzersiz
Bu egzersizi bu örnek kodu tamamlayarak deneyin.
SELECT
c.CalendarYear,
c.CalendarMonth,
c.DayOfWeek,
c.IsWeekend,
SUM(ir.NumberOfIncidents) AS NumberOfIncidents
FROM dbo.IncidentRollup ir
INNER JOIN dbo.Calendar c
ON ir.IncidentDate = c.Date
GROUP BY GROUPING SETS
(
-- Each non-aggregated column from above should appear once
-- Calendar year and month
(___, ___),
-- Day of week
(___),
-- Is weekend or not
(___),
-- This remains empty; it gives us the grand total
()
)
ORDER BY
c.CalendarYear,
c.CalendarMonth,
c.DayOfWeek,
c.IsWeekend;