ORACLE SQL リファレンス(逆引き)

ORACLE SQL リファレンス

Web oracle.se-free.com
ランキング(仮想ランク)を取得する( RANK、DENSE_RANK )
スポンサード リンク

ランキング(仮想ランク)を表示するには、RANK関数、DENSE_RANK関数を使用する

RANK( 数値 ) 引数で指定した数値の、検索対象レコード内のランキングを表示します。

同じ値の場合のランキング方法がそれぞれ異なり、RANK関数は、順位を飛ばし、DENSE_RANK関数は順位を飛ばさずに振ります
DENSE_RANK( 数値 )
WITH_IN GROUP( ORDER BY ) RANK関数、DENSE_RANK関数と一緒に使用します
ORDERY BY句には、ランキング対象の項目を指定します。
降順にランキングする場合は、DESCを付けます。
NULL値を最初にする場合には、NULLS FIRSTを付けます。
NULL値を最後にする場合には、NULLS LASTを付けます。


サンプル表「emp」データ

SQL> select * from emp;

EMP_ID DEPT_ID EMP_NAME  SALARY
------ ------ ---------- ----------
E01    D01   なまえ1    150
E02    D02   なまえ2    300
E03    D03   なまえ3    300
E04    D02   なまえ4    400
E05    D03   なまえ5    500
E06    D03   なまえ6



例1) 「330」のランクを列「salary」の昇順に取得します。( RANK

SQL> select
  2  rank( 330 ) within group( order by salary ) as ランク
  3 from emp;

ランク
----------
4

 ※値「330」は、emp表の列「salary」の値の中では、4番目に小さいことになります。
   RANK関数なので、emp表のsalaryの同じ値「300」をレコード件数分、飛ばしてランクを振っている。


スポンサード リンク


例2) 「330」のランクを列「salary」の昇順に取得します。( DENSE_RANK

SQL> select
  2  dense_rank( 330 ) within group( order by salary ) as ランク
  3 from emp;

ランク
----------
3

 ※値「330」は、emp表の列「salary」の値の中では、3番目に小さいことになります。
   DENSE_RANK関数なので、emp表のsalaryの同じ値「300」のレコード件数分、飛ばさずにランクを振っている。


例3) 「330」のランクを列「salary」の昇順に取得します。
     「salary」の値が NULLのレコードは、レコードの先頭にします。

SQL> select
  2  rank( 330 ) within group( order by salary nulls first ) as ランク
  3 from emp;

ランク
----------
5

 ※値「330」は、emp表の列「salary」の値の中では、5番目に小さいことになります。


例4) 「330」のランクを列「salary」の降順に取得します。( RANK

SQL> select
  2  rank( 330 ) within group(order by salary desc) as ランク
  3 from emp;

ランク
----------
4



例5) 「330」のランクを、列「DEPT_ID」別に、列「salary」の昇順に取得します。( RANK

SQL> select
  2  dept_id,
  3  rank( 330 ) within group(order by salary) as ランク
  4 from emp
  5 group by dept_id;

DEPT_ID ランク
-----  ----------
D01    2
D02    2
D03    2



スポンサード リンク


レコード件数を取得する( COUNT )
最大値を取得する( MAX )
平均値を取得する( AVG )
最小値を取得する( MIN )
グループ単位に集計する( SUM、GROUP BY )
グループ単位に集計結果の値から指定条件でレコードを抽出する( HAVING )
ランキング(仮説ランク)を取得する( RANK、DENSE_RANK )
パーセントランク(仮説ランク)を取得する( PERCENT_RANK )
ソートしたレコードの先頭行に集計関数を使用する( KEEP、FIRST )
ソートしたレコードの最終行に集計関数を使用する( KEEP、LAST )
小計を計算する( ROLLUP )
クロス集計する( CUBE )
小計行とグループ化された集計行を区別する( GROUPING、GROUPING_ID )
標準偏差を取得する( STDDEV )
累積標準偏差を取得する( STDDEV_SAMP )
母集団標準偏差を取得する( STDDEV_POP )
分散を取得する( VARIANCE )
累積分散を取得する( VAR_SAMP )
母集団分散を取得する( VAR_POP )
中央値を取得する( MEDIAN )
相関係数を取得する( CORR )

SQL(DML) へ
忘れっぽいエンジニアのオラクルSQLリファレンス TOPへ