集計の構文
rank_aggregate::=
分析の構文
rank_analytic::=
用途
RANK
は、一連の値における値のランクを計算します。戻り型は、NUMBER
です。
ランク付け基準と同じ値を持つ行は、同じランクになります。Oracle Databaseは連結行の数を連結ランクに追加して、次のランクを計算します。そのため、ランクは連続した数値でない場合があります。このファンクションは、上位N番および下位N番のレポートに有効です。
集計ファンクションとして使用するRANK
は、ファンクションの引数として識別される不確定な行のランクを、指定されたソート指定に従って計算します。ファンクションの引数は、各集計グループの単一行を識別するため、すべての引数は各集計グループ内で定数式に評価される必要があります。定数引数式および集計のORDER
BY
句の式の位置は、一致します。このため、引数の数は同じであり、その型は互換性がある必要があります。
分析ファンクションとして使用するRANK
は、ある問合せが戻す他の行について、その問合せが戻す各行のランクを計算します。この計算は、order_by_clause
にあるvalue_exprs
の値に基づいて行われます。
集計の例
次の例では、サンプル表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