DENSE_RANKは順位を付けるSQL関数である。順位なので、同じ値には同じ順位が付けられる。同じ順位が複数あった場合でも、その後に順位は飛ばされない。
| DBMS | DENSE_RANK |
|---|---|
| MySQL | ✗ |
| Oracle | ✓ |
| PostgreSQL | ✗ |
| SQL Server | ✗ |
DENSE_RANK() OVER(ORDER BY col [,col...])
DENSE_RANK() OVER(PARTITION BY col [,col...] ORDER BY col [,col...])
DENSE_RANK関数を使ったSQLのサンプルを示す。
SELECT DENSE_RANK() OVER(ORDER BY sal), sal FROM emp
RANKとDENSE_RANKは共に順位をつける分析関数であるが、値が重複するときの順位のつけかたが異なる。
SELECT sal,
RANK() OVER(ORDER BY sal),
DENSE_RANK() OVER(ORDER BY sal)
FROM emp
| sal | RANK | DENSE_RANK |
|---|---|---|
| 800 | 1 | 1 |
| 950 | 2 | 2 |
| 1250 | 3 | 3 |
| 1250 | 3 | 3 |
| 1300 | 5 | 4 |
| 1500 | 6 | 5 |