プライマリ・コンテンツに移動
Oracle® Database SQL言語リファレンス
11gリリース2 (11.2)
B56299-08
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

DENSE_RANK

集計の構文

dense_rank_aggregate::=

dense_rank_aggregate.gifの説明が続きます。
図「dense_rank_aggregate.gif」の説明

分析の構文

dense_rank_analytic::=

dense_rank_analytic.gifの説明が続きます。
図「dense_rank_analytic.gif」の説明


関連項目:

構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

DENSE_RANKは、順序付けされた行のグループ内の行のランクを計算し、そのランクをNUMBERとして戻します。ランクは1から始まる連続した整数です。ランクの最大値は、問合せが戻す一意の数値です。ランクの値は、同順位が発生した場合にもスキップされることはありません。そのランク付け基準に関して同じ値を持つ行は、同じランクになります。このファンクションは、上位N番および下位N番のレポートに有効です。

このファンクションは、引数に任意の数値データ型を受け入れ、NUMBERを戻します。

集計の例

次の例では、サンプル表oe.employeesから、給与が$15,500であり、歩合が5%の仮想の従業員のランクを計算します。

SELECT DENSE_RANK(15500, .05) WITHIN GROUP 
  (ORDER BY salary DESC, commission_pct) "Dense Rank" 
  FROM employees;

Dense Rank
----------
         3

分析の例

次の文は、サンプル・スキーマhrの部門60の従業員を、その給与に基づいてランク付けします。給与の値が等しい従業員のランクは同じになります。ただし、ランクの値がスキップされることはありません。この例と、「RANK」の分析の例を比較してください。

SELECT department_id, last_name, salary,
       DENSE_RANK() OVER (PARTITION BY department_id ORDER BY salary) DENSE_RANK
  FROM employees WHERE department_id = 60
  ORDER BY DENSE_RANK, last_name;
 
DEPARTMENT_ID LAST_NAME                     SALARY DENSE_RANK
------------- ------------------------- ---------- ----------
           60 Lorentz                         4200          1
           60 Austin                          4800          2
           60 Pataballa                       4800          2
           60 Ernst                           6000          3
           60 Hunold                          9000          4