카테고리:

집계 함수 (일반)

MAX_BY

열의 최대값을 포함하는 행을 찾고 해당 행에 있는 다른 열의 값을 반환합니다.

예를 들어, 테이블에 employee_idsalary 열이 포함된 경우 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

구문

MAX_BY( <col_to_return>, <col_containing_maximum> [ , <maximum_number_of_values_to_return> ] )
Copy

인자

필수:

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);
Copy

이 테이블의 내용을 보려면 다음 문을 실행하십시오.

SELECT * FROM employees;
Copy
+-------------+---------------+--------+
| 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;
Copy
+-----------------------------+
| MAX_BY(EMPLOYEE_ID, SALARY) |
|-----------------------------|
|                         900 |
+-----------------------------+

다음 사항을 참고하십시오.

  • 둘 이상의 행에 salary 열의 최대값이 포함되어 있으므로 이 함수는 비결정적이며 후속 실행에서 다른 행에 대해 직원 ID를 반환할 수 있습니다.

  • 이 함수는 최대값이 있는 행을 결정할 때 salary 열의 NULL 값을 무시합니다.

다음 예에서는 최고 급여를 받는 상위 3명의 직원 ID를 포함하는 ARRAY를 반환합니다.

SELECT MAX_BY(employee_id, salary, 3) from employees;
Copy
+--------------------------------+
| MAX_BY(EMPLOYEE_ID, SALARY, 3) |
|--------------------------------|
| [                              |
|   900,                         |
|   2010,                        |
|   1001                         |
| ]                              |
+--------------------------------+

예에 표시된 대로, ARRAY의 값은 salary 열의 해당 값을 기준으로 정렬됩니다. 따라서 MAX_BY는 급여를 기준으로 내림차순으로 정렬된 직원의 ID를 반환합니다.

이러한 행 중 두 개 이상이 salary 열에 동일한 값을 포함하는 경우 해당 급여에 대해 반환된 값의 순서는 비결정적입니다.