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

So sánh ROW_NUMBER(), RANK(), và DENSE_RANK()

Trong nhóm các hàm xếp hạng (ranking) dạng cửa sổ, ROW_NUMBER() là phổ biến nhất, tiếp theo là RANK()DENSE_RANK(). Mỗi hàm xếp hạng này (cũng như NTILE()) cung cấp một cách khác nhau để xếp hạng các bản ghi trong SQL Server.

Trong bài này, bạn sẽ xác định tần suất xuất hiện của loại sự cố 3 trong bộ dữ liệu. Bạn cần xếp hạng số lượng sự cố theo thứ tự giảm dần, sao cho ngày có số sự cố cao nhất sẽ có số thứ tự dòng, hạng, và hạng đặc (dense rank) là 1, và tương tự cho các ngày tiếp theo. Để dễ theo dõi, chúng ta chỉ lấy các ngày có ít nhất 8 sự cố.

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ỗi hàm cửa sổ dựa trên bí danh cột. Bạn cần dùng ROW_NUMBER(), RANK(), và DENSE_RANK() mỗi hàm đúng một lần.
  • Điền mệnh đề OVER với sắp xếp theo ir.NumberOfIncidents theo thứ tự giảm dần.

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
	ir.IncidentDate,
	ir.NumberOfIncidents,
    -- Fill in each window function and ordering
    -- Note that all of these are in descending order!
	___() OVER (___ ___ ir.NumberOfIncidents ___) AS rownum,
	___() OVER (___ ___ ir.NumberOfIncidents ___) AS rk,
	___() OVER (___ ___ ir.NumberOfIncidents ___) AS dr
FROM dbo.IncidentRollup ir
WHERE
	ir.IncidentTypeID = 3
	AND ir.NumberOfIncidents >= 8
ORDER BY
	ir.NumberOfIncidents DESC;
Chỉnh sửa và Chạy Mã