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

Tính các phép tổng hợp có lọc

Nếu bạn muốn đếm số lần xuất hiện của một sự kiện theo một tiêu chí lọc nào đó, bạn có thể tận dụng các hàm tổng hợp như SUM(), MIN(), và MAX(), cùng với biểu thức CASE. Ví dụ, SUM(CASE WHEN ir.IncidentTypeID = 1 THEN 1 ELSE 0 END) sẽ trả về số lượng sự cố thuộc loại sự cố 1. Nếu bạn thêm một câu lệnh SUM() cho mỗi loại sự cố, bạn đã xoay (pivot) tập dữ liệu theo ID loại sự cố.

Trong tình huống này, ban quản lý muốn bạn cho biết, theo từng loại sự cố, có bao nhiêu ngày "sự cố lớn" so với "sự cố nhỏ". Ban quản lý định nghĩa một ngày sự cố lớn là có hơn 5 lần xảy ra cùng một loại sự cố trong cùng một ngày, và một ngày sự cố nhỏ là từ 1 đến 5 lần.

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 một biểu thức CASE để chúng ta có thể dùng hàm SUM() tính số ngày sự cố lớn và sự cố nhỏ.
  • Trong biểu thức CASE, bạn nên trả về 1 nếu thỏa điều kiện lọc phù hợp và 0 nếu không.
  • Nhớ chỉ định bí danh khi tham chiếu cột, như ir.IncidentDate hoặc it.IncidentType!

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