SQL RANK 関数

RANKは順位を付けるSQL関数である。順位なので、同じ値には同じ順位が付けられる。同じ順位が複数あった場合、その後は順位が飛ばされる。

RANK
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の違い

RANKとDENSE_RANKは共に順位をつける分析関数であるが、値が重複するときの順位のつけかたが異なる。

SELECT sal,
  RANK()       OVER(ORDER BY sal),
  DENSE_RANK() OVER(ORDER BY sal)
FROM emp
RANKとDENSE_RANKの違い
sal RANK DENSE_RANK
800 1 1
950 2 2
1250 3 3
1250 3 3
1300 5 4
1500 6 5