MIN_BY

MIN_BY (최솟값을 가진 행의 값)

한 열에 대한 최솟값을 담은 행을 찾아 그 행의 다른 열 값을 반환해요.

출처: Snowflake SQL Reference - 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 열에 같은 값을 담고 있으면, 그 급여에 대한 반환 값들의 순서는 비결정적이에요.

참고: MIN_BY 및 MAX_BY 집계 함수 사용

더 알아보기