- カテゴリ:
集計関数 (一般)
MAX_BY¶
列の最大値を含む行を探し、その行にある別の列の値を返します。
たとえば、テーブルに列 employee_id
と salary
が含まれている場合、 MAX_BY(employee_id, salary)
は salary
列の値が最も大きい行の employee_id
列の値を返します。
指定された最大値が複数の行に含まれている場合、関数は非決定的です。
複数行の値を返すには、オプションの maximum_number_of_values_to_return
引数を指定します。この追加の引数を使用すると、
この関数は、指定された列の最大値を持つ行の列の値を含む ARRAY を返します。
ARRAY の値は、最大値を含む列の対応する値で並べ替えられます。
複数の行にこれらの最大値が含まれている場合、関数は非決定的です。
たとえば、 MAX_BY(employee_id, salary, 5)
は、 salary
列の最大値を含む5行に対する employee_id
列の値の ARRAY を返します。ARRAY の IDs は、 salary
列の対応する値で並べ替えられます。
- こちらもご覧ください:
構文¶
MAX_BY( <col_to_return>, <col_containing_maximum> [ , <maximum_number_of_values_to_return> ] )
引数¶
必須:
col_to_return
返す値を含む列。
col_containing_maximum
最大値を含む列。
オプション:
maximum_number_of_values_to_return
返される値の最大数を指定する整数定数。正の数を指定する必要があります。指定できる最大数は
1000
です。
戻り値¶
maximum_number_of_values_to_return
が指定されていない場合、関数はcol_to_return
と同じ型の値を返します。maximum_number_of_values_to_return
が指定されている場合、関数はcol_to_return
と同じ型の値を含む ARRAY を返します。ARRAY の値は、対応するcol_containing_maximum
値で並べ替えられます。たとえば、
MAX_BY(employee_id, salary, 5)
は、給与が最も高い従業員5人の IDs をsalary
で(降順で)並べ替えて返します。
使用上の注意¶
この関数は、
col_containing_maximum
の NULL 値を無視します。col_containing_maximum
のすべての値が NULL の場合、関数は NULL を返します(オプションのmaximum_number_of_values_to_return
引数が指定されているかどうかに関係なく)。
例¶
次の例は、MAX_BY 関数の使用方法を説明しています。
これらの例を実行するには、次のステートメントを実行して、例に対するテーブルとデータを設定します。
CREATE OR REPLACE TABLE employees(employee_id NUMBER, department_id NUMBER, salary NUMBER);
INSERT INTO employees VALUES
(1001, 10, 10000),
(1020, 10, 9000),
(1030, 10, 8000),
(900, 20, 15000),
(2000, 20, NULL),
(2010, 20, 15000),
(2020, 20, 8000);
次のステートメントを実行して、このテーブルの内容を表示します。
SELECT * FROM employees;
+-------------+---------------+--------+
| EMPLOYEE_ID | DEPARTMENT_ID | SALARY |
|-------------+---------------+--------|
| 1001 | 10 | 10000 |
| 1020 | 10 | 9000 |
| 1030 | 10 | 8000 |
| 900 | 20 | 15000 |
| 2000 | 20 | NULL |
| 2010 | 20 | 15000 |
| 2020 | 20 | 8000 |
+-------------+---------------+--------+
次の例は、給与が最も高い従業員の ID を返します。
SELECT MAX_BY(employee_id, salary) FROM employees;
+-----------------------------+
| MAX_BY(EMPLOYEE_ID, SALARY) |
|-----------------------------|
| 900 |
+-----------------------------+
次の点に注意してください。
複数の行に
salary
列の最大値が含まれているため、関数は非決定的であり、後続の実行で別の行の従業員 ID を返す可能性があります。関数は、最大値を持つ行を決定するときに、
salary
列の NULL 値を無視します。
次の例は、給与が最も高い従業員3人の IDs を含む ARRAY を返します。
SELECT MAX_BY(employee_id, salary, 3) from employees;
+--------------------------------+
| MAX_BY(EMPLOYEE_ID, SALARY, 3) |
|--------------------------------|
| [ |
| 900, |
| 2010, |
| 1001 |
| ] |
+--------------------------------+
例に示すように、 ARRAY の値は、 salary
列の対応する値で並べ替えられます。つまり、 MAX_BY は、給与で降順に並べ替えた従業員の IDs を返します。
これらの行の複数で salary
列に同じ値が含まれている場合、その給与に対して返される値の順序は非決定的です。