Menggabungkan beberapa agregasi dalam satu kueri
Dalam tiga latihan terakhir, kita telah membahas operator pengelompokan ROLLUP, CUBE, dan GROUPING SETS. Dari ketiganya, GROUPING SETS adalah yang paling dapat disesuaikan, memungkinkan Anda membangun tepat tingkat agregasi yang Anda inginkan. GROUPING SETS tidak membuat asumsi tentang hierarki (berbeda dengan ROLLUP) dan tetap terkelola dengan jumlah kolom yang cukup banyak (berbeda dengan CUBE).
Dalam latihan ini, kita ingin menguji beberapa dugaan dengan data kita:
- Kami melihat lebih sedikit insiden per bulan sejak memperkenalkan pelatihan pada November 2019.
- Lebih banyak insiden terjadi pada hari Selasa dibandingkan hari kerja lainnya.
- Lebih banyak insiden terjadi pada akhir pekan dibandingkan hari kerja.
Latihan ini merupakan bagian dari kursus
Analisis Deret Waktu di SQL Server
Instruksi latihan
Lengkapi grouping set berdasarkan dugaan kita di atas. Kita ingin melihat grouping set berikut selain total keseluruhan:
- Satu set berdasarkan tahun dan bulan kalender
- Satu set berdasarkan hari dalam seminggu
- Satu set berdasarkan apakah tanggal tersebut akhir pekan atau bukan
Latihan interaktif langsung praktik
Cobalah latihan ini dengan melengkapi kode contoh ini.
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;