- 카테고리:
- 집계 함수 (일반) 
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의 ID는 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)는- salary기준으로 정렬된(내림차순) 가장 높은 급여를 받는 상위 5명의 직원 ID를 반환합니다.
사용법 노트¶
- 이 함수는 - 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 값을 무시합니다.
다음 예에서는 최고 급여를 받는 상위 3명의 직원 ID를 포함하는 ARRAY를 반환합니다.
SELECT MAX_BY(employee_id, salary, 3) from employees;
+--------------------------------+
| MAX_BY(EMPLOYEE_ID, SALARY, 3) |
|--------------------------------|
| [                              |
|   900,                         |
|   2010,                        |
|   1001                         |
| ]                              |
+--------------------------------+
예에 표시된 대로, ARRAY의 값은 salary 열의 해당 값을 기준으로 정렬됩니다. 따라서 MAX_BY는 급여를 기준으로 내림차순으로 정렬된 직원의 ID를 반환합니다.
이러한 행 중 두 개 이상이 salary 열에 동일한 값을 포함하는 경우 해당 급여에 대해 반환된 값의 순서는 비결정적입니다.
MIN_BY 및 MAX_BY 집계 함수 사용하기 도 참조하십시오.