RANKは順位を付けるSQL関数である。順位なので、同じ値には同じ順位が付けられる。同じ順位が複数あった場合、その後は順位が飛ばされる。
DBMS | RANK |
---|---|
MySQL | ✗ |
Oracle | ✓ |
PostgreSQL | ✗ |
SQL Server | ✗ |
RANK() OVER(ORDER BY col [,col...])
RANK() OVER(PARTITION BY col [,col...] ORDER BY col [,col...])
RANK関数を使ったSQLのサンプルを示す。
SELECT RANK() OVER(ORDER BY sal), sal FROM emp
次のSQLのように、WHERE句、GROUP BY句及びHAVING句の中でRANK関数を使うと、ORA-30483「ここでウィンドウ・ファンクションは使用できません。」のエラーが発生する。
SELECT RANK() OVER(ORDER BY sal), sal FROM emp WHERE RANK() OVER(ORDER BY sal) <= 10
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 |