MIN_BY
MIN_BY (최솟값을 가진 행의 값)
한 열에 대한 최솟값을 담은 행을 찾아 그 행의 다른 열 값을 반환해요.
본문
예를 들어 테이블이 employee_id와 salary 열을 담고 있다면, MIN_BY(employee_id, salary)는 salary 열에서 가장 낮은 값을 가진 행의 employee_id 열 값을 반환해요.
여러 행이 지정된 최솟값을 담고 있으면 함수는 비결정적(non-deterministic)이에요.
여러 행의 값을 반환하려면 선택적 maximum_number_of_values_to_return 인자를 지정하세요. 이 추가 인자를 사용하면:
-
함수는 지정된 열의 가장 낮은 값을 가진 행들의 열 값들을 담은 ARRAY를 반환해요.
-
ARRAY의 값들은 최솟값을 담은 열의 해당 값들로 정렬돼요.
-
여러 행이 이 최저 값들을 담고 있으면 함수는 비결정적이에요.
예를 들어 MIN_BY(employee_id, salary, 5)는 salary 열에서 가장 낮은 값을 가진 다섯 행에 대한 employee_id 열 값들의 ARRAY를 반환해요. ARRAY의 ID들은 salary 열의 해당 값들로 정렬돼요.
참고: MIN
구문
MIN_BY( <col_to_return>, <col_containing_minimum> [ , <maximum_number_of_values_to_return> ] )
인자
필수:
col_to_return
반환할 값을 담은 열이에요.
col_containing_minimum
최솟값을 담은 열이에요.
선택:
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_minimum값들로 정렬돼요.예를 들어
MIN_BY(employee_id, salary, 5)는 가장 낮은 다섯 급여를 가진 직원들의 ID를salary로(오름차순으로) 정렬해 반환해요.
사용 시 참고 사항
-
이 함수는
col_containing_minimum의 NULL 값을 무시해요. -
col_containing_minimum의 모든 값이 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 값을 무시해요.
다음 예시는 가장 낮은 세 급여를 가진 직원들의 ID를 담은 ARRAY를 반환해요.
SELECT MIN_BY(employee_id, salary, 3) FROM employees;
+--------------------------------+
| MIN_BY(EMPLOYEE_ID, SALARY, 3) |
|--------------------------------|
| [ |
| 1030, |
| 2020, |
| 1020 |
| ] |
+--------------------------------+
예시에서 보듯 ARRAY의 값들은 salary 열의 해당 값들로 정렬돼요. 따라서 MIN_BY는 직원들의 ID를 급여 오름차순으로 정렬해 반환해요.
이 행들 중 둘 이상이 salary 열에 같은 값을 담고 있으면, 그 급여에 대한 반환 값들의 순서는 비결정적이에요.