Đôi khi bạn muốn một dòng có cùng sắp xếp giá trị cột như các dòng khác có cùng một xếp loại. Nếu thế thì hàm RANK () có thể giúp bạn. Hàm RANK có cú pháp như sau:
RANK ( ) OVER ( [] )
Trong đó:
là một cột hay tập hợp các cột được sử dụng để quyết đinh việc đánh số liên tục trong hàm RANK
là một cột hay tập hợp các cột được sử dụng để sắp xếp tập hợp kết quả trong nhóm (partition)
Hàm RANK sẽ đánh số liên tục một tập hợp bản ghi nhưng khi có 2 dòng có cùng giá trị sắp xếp thì hàm sẽ đánh giá là cùng bậc giá trị. Giá trị xếp loại vẫn sẽ tăng kể cả khi có 2 dòng cùng giá trị, vì vậy khi đánh giá một giá trị sắp xếp tiếp theo thì số thứ tự vẫn tiếp tục được đánh nhưng sẽ tăng thêm 1 giá trị vào các dòng tiếp theo trong tập hợp.
Đây là ví dụ của hàm rank trong tập hợp bản ghi sắp xếp theo Age:
SELECT RANK() OVER (ORDER BY Age) AS [Rank by Age],
FirstName,
Age
FROM Person
Và kết quả trả về:
Rank by Age FirstName Age
-------------------- ---------- ------
1 Larry 5
2 Doris 6
2 George 6
4 Mary 11
4 Sherry 11
6 Sam 17
7 Ted 23
7 Marty 23
9 Sue 29
10 Frank 38
11 John 40
Như bạn thấy, với các dòng trùng giá trị Age thì ở phần Rank by Age cũng có cùng giá trị. Bạn có thể thấy Doris và George, Mary và Sherry, cũng tương tự là Ted và Marty, từng cặp một đều có cùng giá trị Rank by Age. Lưu ý rằng Doris và George cùng có xếp loại là 2 nhưng xếp loại của Mary (có giá trị Age tiếp theo) lại không phải 3 mà là 4. Nguyên nhân ở đây là Mary được trả về bản ghi thứ 4 trong tập hợp bản ghi, và hàm RANK() đã lấy số liệu đó khi thiết lập giá trị xếp loại tiếp theo trong Rank by Age
Nếu bạn muốn có một nhiều xếp loại trong tập hợp bản ghi của mình thì với từng xếp loại bạn cần đặt một nhóm cụ thể bằng cách sử dụng mệnh đề PARTITION BY trong hàm RANK. Ví dụ dưới sẽ cho thấy tác dụng khi tôi nhóm xếp loại theo Gender và sắp xếp theo Age
SELECT RANK() OVER (PARTITION BY Gender ORDER BY Age) AS [Partition by Gender],
FirstName,
Age,
Gender
FROM Person
Đây là kết quả khi chạy các hàm truy vấn trên:
Partition by Gender FirstName Age Gender
-------------------- ---------- ----------- ------
1 Doris 6 F
2 Mary 11 F
2 Sherry 11 F
4 Sue 29 F
1 Larry 5 M
2 George 6 M
3 Sam 17 M
4 Ted 23 M
4 Marty 23 M
6 Frank 38 M
7 John 40 M
Bạn có thể thấy là Gioitinh là “F” được bắt đầu xếp loại từ 1 cho đến 4, sau đó bắt đầu đánh số lại từ 1 cho Gioitinh là “M”
» Tin mới nhất:
» Các tin khác: