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
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àmSUM()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.IncidentDatehoặcit.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;