Mulai sekarangMulai gratis

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:

  1. Kami melihat lebih sedikit insiden per bulan sejak memperkenalkan pelatihan pada November 2019.
  2. Lebih banyak insiden terjadi pada hari Selasa dibandingkan hari kerja lainnya.
  3. Lebih banyak insiden terjadi pada akhir pekan dibandingkan hari kerja.

Latihan ini merupakan bagian dari kursus

Analisis Deret Waktu di SQL Server

Lihat Kursus

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;
Edit dan Jalankan Kode