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

출처: Snowflake SQL Reference - MAX_BY

본문

구문

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

더 알아보기