Bắt đầu ngayBắt đầu miễn phí

Kết hợp nhiều phép tổng hợp trong một truy vấn

Trong ba bài tập trước, chúng ta đã đi qua các toán tử nhóm ROLLUP, CUBEGROUPING SETS. Trong số này, GROUPING SETS là linh hoạt nhất, cho phép bạn xây dựng chính xác các cấp độ tổng hợp cần thiết. GROUPING SETS không giả định thứ bậc (khác với ROLLUP) và vẫn dễ quản lý với số lượng cột tương đối lớn (khác với CUBE).

Trong bài tập này, chúng ta muốn kiểm tra vài giả thuyết với dữ liệu của mình:

  1. Số sự cố theo tháng đã giảm kể từ khi triển khai đào tạo vào tháng 11 năm 2019.
  2. Thứ Ba có nhiều sự cố hơn các ngày trong tuần khác.
  3. Cuối tuần có nhiều sự cố hơn ngày thường.

Bài tập này là một phần của khóa học

Phân tích chuỗi thời gian trong SQL Server

Xem khóa học

Hướng dẫn bài tập

Điền các grouping set dựa trên các giả thuyết ở trên. Ngoài tổng cộng toàn cục, chúng ta muốn xem các grouping set sau:

  • Một tập theo năm và tháng dương lịch
  • Một tập theo thứ trong tuần
  • Một tập theo việc ngày đó là cuối tuần hay không

Bài tập tương tác thực hành trực tiếp

Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.

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;
Chỉnh sửa và Chạy Mã