RANK
集計の構文
rank_aggregate::=
分析構文
rank_analytic::=
関連項目:
構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。
目的
RANKは、一連の値における値のランクを計算します。戻り型は、NUMBERです。
関連項目:
暗黙的な変換の詳細は、表2-9を参照してください。数値の優先順位の詳細は、「数値の優先順位の詳細」を参照してください
ランク付け基準と同じ値を持つ行は、同じランクになります。Oracle Databaseは連結行の数を連結ランクに追加して、次のランクを計算します。そのため、ランクは連続した数値でない場合があります。このファンクションは、上位N番および下位N番のレポートに有効です。
-
集計ファンクションとして使用する
RANKは、ファンクションの引数として識別される不確定な行のランクを、指定されたソート指定に従って計算します。ファンクションの引数は、各集計グループの単一行を識別するため、すべての引数は各集計グループ内で定数式に評価される必要があります。定数引数式および集計のORDERBY句の式の位置は、一致します。このため、引数の数は同じであり、その型は互換性がある必要があります。 -
分析ファンクションとして使用する
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
