- カテゴリ:
集計関数 (一般)
MIN_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> ] )
引数¶
必須:
col_to_return
返す値を含む列。
col_containing_mininum
最小値を含む列。
オプション:
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
値で並べ替えられます。たとえば、
MIN_BY(employee_id, salary, 5)
は、給与が最も低い従業員5人の IDs をsalary
で(昇順で)並べ替えて返します。
使用上の注意¶
この関数は、
col_containing_mininum
の NULL 値を無視します。col_containing_mininum
のすべての値が NULL の場合、関数は NULL を返します(オプションのmaximum_number_of_values_to_return
引数が指定されているかどうかに関係なく)。
例¶
次の例は、MIN_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 MIN_BY(employee_id, salary) FROM employees;
+-----------------------------+
| MIN_BY(EMPLOYEE_ID, SALARY) |
|-----------------------------|
| 1030 |
+-----------------------------+
次に注意してください。
複数の行に
salary
列の最小値が含まれているため、関数は非決定的であり、後続の実行で別の行の従業員 ID を返す可能性があります。関数は、最小値を持つ行を決定するときに、
salary
列の NULL 値を無視します。
次の例は、給与が最も低い従業員3人の IDs を含む ARRAY を返します。
SELECT MIN_BY(employee_id, salary, 3) FROM employees;
+--------------------------------+
| MIN_BY(EMPLOYEE_ID, SALARY, 3) |
|--------------------------------|
| [ |
| 1030, |
| 2020, |
| 1020 |
| ] |
+--------------------------------+
例に示すように、 ARRAY の値は、 salary
列の対応する値で並べ替えられます。つまり、 MIN_BY は、給与で昇順に並べ替えた従業員の IDs を返します。
これらの行の複数で salary
列に同じ値が含まれている場合、その給与に対して返される値の順序は非決定的です。