[DATABASE] Hướng Dẫn Sử Dụng Hàm ROW_NUMBER, RANK Và ...
Có thể bạn quan tâm
Bài viết hôm nay, mình xin hướng dẫn các bạn sử dụng các hàm: ROW_NUMBER, RANK và DENSE_RANK trong Sqlserver.
[DATABASE] Hướng dẫn sử dụng ROW_NUMBER, RANK và DENSE_RANK trong sqlserverVD: Chúng ta có yêu cầu như sau
- Lấy danh sách nhân viên dựa vào ngày ký hợp đồng cho biết nhân viên đó là người thứ mấy trong phòng được ký hợp đồng
- Lấy danh sách nhân viên dựa vào lương cho biết nhân viên đó xếp hạng thứ mấy trong phòng
Với yêu cầu 1, ta có bảng kết quả sau:
| DEPTNO | ENAME | HIREDATE | SAL | NUM |
| 10 | CLARK | 09/06/1981 | 2450 | 1 |
| 10 | KING | 17/11/1981 | 5000 | 2 |
| 10 | MILLER | 23/01/1982 | 1300 | 3 |
| 20 | SMITH | 17/12/1980 | 800 | 1 |
| 20 | JONES | 02/04/1981 | 2975 | 2 |
| 20 | FORD | 03/12/1981 | 3000 | 3 |
| 20 | SCOTT | 09/12/1982 | 3000 | 4 |
| 20 | ADAMS | 12/01/1983 | 1100 | 5 |
| 30 | ALLEN | 20/02/1981 | 1600 | 1 |
| 30 | WARD | 22/02/1981 | 1250 | 2 |
| 30 | BLAKE | 01/05/1981 | 2850 | 3 |
| 30 | TURNER | 08/09/1981 | 1500 | 4 |
| 30 | MARTIN | 28/09/1981 | 1250 | 5 |
| 30 | JAMES | 03/12/1981 | 950 | 6 |
Và đây là câu SELECT kết hợp với ROW_NUMBER để thực hiện:
SELECT deptno, ename, hiredate, sal, ROW_NUMBER () OVER (PARTITION BY deptno ORDER BY hiredate) num FROM emp ORDER BY deptno, num;Với yêu cầu số 2, ta có bảng kết quả sau:
| DEPTNO | ENAME | HIREDATE | SAL | RANK_SAL | DENSE_RANK_SAL |
| 10 | MILLER | 1/23/1982 | 1300 | 1 | 1 |
| 10 | CLARK | 6/9/1981 | 2450 | 2 | 2 |
| 10 | KING | 11/17/1981 | 5000 | 3 | 3 |
| 20 | SMITH | 12/17/1980 | 800 | 1 | 1 |
| 20 | ADAMS | 1/12/1983 | 1100 | 2 | 2 |
| 20 | JONES | 4/2/1981 | 2975 | 3 | 3 |
| 20 | SCOTT | 12/9/1982 | 3000 | 4 | 4 |
| 20 | FORD | 12/3/1981 | 3000 | 4 | 4 |
| 30 | JAMES | 12/3/1981 | 950 | 1 | 1 |
| 30 | MARTIN | 9/28/1981 | 1250 | 2 | 2 |
| 30 | WARD | 2/22/1981 | 1250 | 2 | 2 |
| 30 | TURNER | 9/8/1981 | 1500 | 4 | 3 |
| 30 | ALLEN | 2/20/1981 | 1600 | 5 | 4 |
| 30 | BLAKE | 5/1/1981 | 2850 | 6 | 5 |
Và đây là câu SELECT kết hợp với RANK và DENSE_RANK để thực hiện:
SELECT deptno, ename, hiredate, sal, RANK () OVER (PARTITION BY deptno ORDER BY sal) rank_sal, DENSE_RANK () OVER (PARTITION BY deptno ORDER BY sal) dense_rank_sal FROM emp ORDER BY deptno;Nhìn vào kết quả trên ta thấy rằng kết quả của hàm RANK và DENSE_RANK có những điểm như sau:
- Giống nhau: với những dòng có cùng SAL thì sẽ có cùng hạng
- Khác nhau:+ Hàm RANK sẽ bỏ qua thứ hạng tiếp theo cho những dòng có cùng hạng trước đó+ Hàm DENSE_RANK không bỏ qua thứ hạng tiếp theo cho những dòng có cùng hạng trước đó
LaptrinhVB via oracletechtalk.blogspot.com
Tags: dense_rank sqlserverrank sqlserverrow_number sqlTừ khóa » Hàm Rownum Trong Oracle
-
Cùng Tìm Hiểu Cơ Chế Hoạt động Của ROWNUM
-
SQL TOP, LIMIT Or ROWNUM - TRẦN VĂN BÌNH MASTER
-
Tìm Hiểu Về Mệnh Đề TOP, LIMIT, ROWNUM Trong SQL - CodeHub
-
Mệnh đề TOP, LIMIT, ROWNUM Trong SQL
-
ROWNUM
-
Hàm ROWNUM – Oracle/PLSQL | Học Toàn Tập
-
[Tự Học SQL] Sử Dụng TOP, LIMIT Or ROWNUM, TOP PERCENT ...
-
Oracle SQL - Nhóm Theo ROWNUM Trong Mệnh đề Có? - HelpEx
-
Phân Biệt Một Số Khái Niệm Trong SQL (Phần 2) - Viblo
-
Lệnh SELECT Trong Oracle - Freetuts
-
Lệnh TOP Trong SQL
-
Mệnh đề TOP Trong SQL - Học Sql Cơ Bản đến Nâng Cao - VietTuts
-
Các Lệnh SELECT TOP Trong SQL - BAC
-
LIMIT Giới Hạn Kết Quả Trong SQL