- カテゴリ:
集計関数 (一般)
MIN_BY / MAX_BY¶
列の最小値または最大値を含む行を検索し、その行にある別の列の値を返します。
たとえば、テーブルに列 employee_id
と salary
が含まれている場合、 MIN_BY(employee_id, salary)
は salary
列の値が最も小さい行の employee_id
列の値を返します。
指定された最小値または最大値が複数の行に含まれている場合、関数は非決定的です。
複数行の値を返すには、オプションの maximum_number_of_values_to_return
引数を指定します。この追加の引数を使用すると、
この関数は、指定された列の最小値または最大値を持つ行の列の値を含む ARRAY を返します。
ARRAY の値は、最小値または最大値を含む列の対応する値で並べ替えられます。
複数の行にこれらの最小値または最大値が含まれている場合、関数は非決定的です。
たとえば、 MIN_BY(employee_id, salary, 5)
は、 salary
列の最小値を含む5行に対する employee_id
列の値の ARRAY を返します。ARRAY の IDs は、 salary
列の対応する値で並べ替えられます。
- こちらもご参照ください
構文¶
MIN_BY( <col_to_return>, <col_containing_mininum> [ , <maximum_number_of_values_to_return> ] )
MAX_BY( <col_to_return>, <col_containing_maximum> [ , <maximum_number_of_values_to_return> ] )
引数¶
必須:
col_to_return
返す値を含む列。
col_containing_mininum
、 .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_mininum
/col_containing_maximum
値で並べ替えられます。たとえば、
MIN_BY(employee_id, salary, 5)
は、給与が下位5位の従業員の IDs をsalary
で(降順で)並べ替えて返します。
使用上の注意¶
この関数は、
col_containing_mininum
とcol_containing_maximum
の NULL 値を無視します。col_containing_mininum
またはcol_containing_maximum
のすべての値が NULL の場合、関数は NULL を返します(オプションのmaximum_number_of_values_to_return
引数が指定されているかどうかに関係なく)。
例¶
次の例は、 MIN_BY と 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);
次のステートメントを実行して、このテーブルの内容を表示します。
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 |
+-------------+---------------+--------+
次の例は、給与が最も高い従業員と最も低い従業員の IDs を返します。
SELECT MIN_BY(employee_id, salary), MAX_BY(employee_id, salary) from employees;
+-----------------------------+-----------------------------+
| MIN_BY(EMPLOYEE_ID, SALARY) | MAX_BY(EMPLOYEE_ID, SALARY) |
|-----------------------------+-----------------------------|
| 1030 | 900 |
+-----------------------------+-----------------------------+
次に注意してください。
複数の行に
salary
列の最大値が含まれているため、関数は非決定的であり、後続の実行で別の行の従業員 ID を返す可能性があります。関数は、最小値と最大値を持つ行を決定するときに、
salary
列の NULL 値を無視します。
次の例は、給与が上位3位および下位3位の従業員の IDs を含む ARRAY を返します。
SELECT MIN_BY(employee_id, salary, 3), MAX_BY(employee_id, salary, 3) from employees;
+--------------------------------+--------------------------------+
| MIN_BY(EMPLOYEE_ID, SALARY, 3) | MAX_BY(EMPLOYEE_ID, SALARY, 3) |
|--------------------------------+--------------------------------|
| [ | [ |
| 1030, | 900, |
| 1020, | 2010, |
| 1001 | 1001 |
| ] | ] |
+--------------------------------+--------------------------------+
例に示すように、 ARRAY の値は、 salary
列の対応する値で並べ替えられます。
MIN_BY は、給与で昇順に並べ替えた従業員の IDs を返します。
MAX_BY は、給与で降順に並べ替えた従業員の IDs を返します。
これらの行の複数で salary
列に同じ値が含まれている場合、その給与に対して返される値の順序は非決定的です。