RANK

集計の構文

rank_aggregate::=

分析構文

rank_analytic::=

関連項目:

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

目的

RANKは、一連の値における値のランクを計算します。戻り型は、NUMBERです。

関連項目:

暗黙的な変換の詳細は、表2-8を参照してください。数値の優先順位の詳細は、「数値の優先順位の詳細」を参照してください。

ランク付け基準と同じ値を持つ行は、同じランクになります。Oracle Databaseは連結行の数を連結ランクに追加して、次のランクを計算します。そのため、ランクは連続した数値でない場合があります。このファンクションは、上位N番および下位N番のレポートに有効です。

  • 集計ファンクションとして使用するRANKは、ファンクションの引数として識別される不確定な行のランクを、指定されたソート指定に従って計算します。ファンクションの引数は、各集計グループの単一行を識別するため、すべての引数は各集計グループ内で定数式に評価される必要があります。定数引数式および集計のORDER BY句の式の位置は、一致します。このため、引数の数は同じであり、その型は互換性がある必要があります。

  • 分析ファンクションとして使用するRANKは、ある問合せが戻す他の行について、その問合せが戻す各行のランクを計算します。この計算は、order_by_clauseにあるvalue_exprsの値に基づいて行われます。

関連項目:

ORDER BY句の文字値を比較するためにRANKで使用する照合を定義する照合決定ルールは、『Oracle Databaseグローバリゼーション・サポート・ガイド』の付録Cを参照してください。

集計の例

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

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

      Rank
----------
       105

同様に、次の問合せは、従業員の給与から給与が$15,500のランクを戻します。

SELECT RANK(15500) WITHIN GROUP 
   (ORDER BY salary DESC) "Rank of 15500" 
   FROM employees;

Rank of 15500
--------------
             4

分析の例

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

SELECT department_id, last_name, salary,
       RANK() OVER (PARTITION BY department_id ORDER BY salary) RANK
  FROM employees WHERE department_id = 60
  ORDER BY RANK, last_name;

DEPARTMENT_ID LAST_NAME                     SALARY       RANK
------------- ------------------------- ---------- ----------
           60 Lorentz                         4200          1
           60 Austin                          4800          2
           60 Pataballa                       4800          2
           60 Ernst                           6000          4
           60 Hunold                          9000          5