MAX_BY
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 열의 가장 높은 값이 있는 다섯 행에 대한 employee_id 열 값의 ARRAY를 반환해요. ARRAY의 ID는 salary 열의 해당 값에 따라 정렬돼요.
참조: MAX
본문
구문
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)는 가장 높은 급여 다섯 개를 가진 직원의 ID를 salary(내림차순)로 정렬해 반환해요.
사용상 주의사항
- 함수는 col_containing_maximum의 NULL 값을 무시해요.
- col_containing_maximum의 모든 값이 NULL이면 함수는(선택적 maximum_number_of_values_to_return 인자가 지정되었는지 여부와 관계없이) NULL을 반환해요.
예시
다음 예시들은 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 값을 무시해요.
다음 예시는 가장 높은 급여 세 개를 가진 직원의 ID를 포함하는 ARRAY를 반환해요:
SELECT MAX_BY(employee_id, salary, 3) from employees;
+--------------------------------+
| MAX_BY(EMPLOYEE_ID, SALARY, 3) |
|--------------------------------|
| [ |
| 900, |
| 2010, |
| 1001 |
| ] |
+--------------------------------+
예시에서처럼 ARRAY의 값들은 salary 열의 해당 값에 따라 정렬돼요. 따라서 MAX_BY는 salary 내림차순으로 정렬된 직원 ID를 반환해요.
이러한 행 중 둘 이상이 salary 열에 같은 값을 포함하면 그 salary의 반환 값 순서는 비결정적이에요.
참조: Using the MIN_BY and MAX_BY aggregate functions
더 알아보기
- Aggregate functions (General) — 집계 함수 모음
- MIN_BY — 최솟값 행 함수