ablog

不器用で落着きのない技術者のメモ

Oracle の分析関数 dense_rank()

Oracle の dense_rank() 関数を使うと、

  • ある列の値で順位をつける。
  • 同順位がある場合は順位を飛ばさない。

ということを実現できる。

SQL

SQL> select sid, serial#, program, dense_rank() over(order by program) from v$session;

実行結果

       SID    SERIAL# PROGRAM                                          DENSE_RANK()OVER(ORDERBYPROGRAM)
---------- ---------- ------------------------------------------------ --------------------------------
       248      57430 JDBC Thin Client                                                                1
       246       1841 JDBC Thin Client                                                                1
       218      63648 JDBC Thin Client                                                                1
       220      30967 JDBC Thin Client                                                                1
       221      11553 JDBC Thin Client                                                                1
       253       8720 JDBC Thin Client                                                                1
       228        466 SQL Developer                                                                   2
       223      21506 ob10.exe                                                                        3
       239      59748 ob10.exe                                                                        3
       229       6288 ob9.exe                                                                         4
...