Chuyển đến nội dung chính

Bài đăng

Đang hiển thị bài đăng từ Tháng 7, 2019

Sử dụng ROW_NUMBER, RANK, và DENSE_RANK

Trong bài viết này, mình sẽ hướng dẫn các bạn sử dụng các hàm ROW_NUMBER, RANK, và DENSE_RANK(). Trong bài viết này sử dụng AdventureWorks2016, bạn có thể download tại: https://www.microsoft.com/en-us/download/details.aspx?id=49502 Phân biệt ROW_NUMBER, RANK, và DENSE_RANK Đầu tiên, bạn nhìn ví dụ sau: SELECT CustomerID, SalesOrderID, CAST(OrderDate AS DATE) AS OrderDate, ROW_NUMBER() OVER(ORDER BY OrderDate) AS [ROW_NUMBER], RANK() OVER(ORDER BY OrderDate) AS [RANK], DENSE_RANK() OVER(ORDER BY OrderDate) AS [DENSE_RANK] FROM Sales.SalesOrderHeader WHERE CustomerID = 11300; Kết quả: Cả 3 hàm đều Order by OrderDate Hàm ROW_NUMBER dùng để xếp hạng kết quả một cách tuần tự bắt đầu từ 1 và không quan tâm đến các giá trị giống nhau. Cú pháp: ROW_NUMBER ( ) OVER ( [ PARTITION BY value_expression , ... [ n ] ] order_by_clause ) Tại dòng thứ 7 và dòng 8, giá trị OrderDate đều giống nhau. RANK và DENSE_RANK đều trả về giá trị là 7. Tại dòng thứ 9, hàm RANK trực tiếp b