프로그래밍/SQL, Hive, SAS 관련 정보
[SQL 기초] 집계함수의 특성을 활용한 조건 별 집계
TrillionNT
2025. 1. 27. 14:55
2025.02.24 - [프로그래밍/SQL, Hive, SAS 관련 정보] - [SQL] Table of Contents
집계함수의 특성은 지난 포스팅에서 살펴본 바 있습니다.
2025.01.19 - [프로그래밍/SQL, Hive, SAS 관련 정보] - [SQL 기초] 집계 함수의 적용
집계함수(column_name)은 NULL 갑을 제외한 레코드에 대해서 집계를 진행한다고 말씀드렸었는데요.
이 특성을 이용해서 Table에서 where절을 쓰지않고 바로 집계함수를 적용할 수 있는 경우도 있습니다.
SELECT
MAX(CASE WHEN 조건 THEN 값 END) AS 별칭,
MIN(CASE WHEN 조건 THEN 값 END) AS 별칭,
AVG(CASE WHEN 조건 THEN 값 END) AS 별칭,
COUNT(CASE WHEN 조건 THEN 값 END) AS 별칭
FROM 테이블명;
이런 방식으로 조건을 만족하지 않을 경우 CASE문은 NULL을 리턴하고 다시 집계함수가 NULL을 무시하기 때문에 사용할 수 있는 방식입니다.
예를들어 아래와 같은 Employees 테이블이 있을 때
EMPLOYEE_ID | NAME | DEPARTMENT_ID | SALARY |
---|---|---|---|
1 | Alice | 10 | 6000 |
2 | Bob | 20 | 5000 |
3 | Charlie | 10 | 7000 |
4 | Diana | 30 | NULL |
5 | Eva | 10 | 4000 |
Department ID가 10인 경우만 대상으로 집계하려면 Where절을 쓸 수도 있겠지만 원본 테이블을 건드리지 않은 상태에서 아래와 같이 쿼리를 작성해 줄 수도 있습니다.
SELECT
MAX(CASE WHEN DEPARTMENT_ID = 10 THEN SALARY END) AS MAX_SALARY_DEPT_10,
MIN(CASE WHEN DEPARTMENT_ID = 10 THEN SALARY END) AS MIN_SALARY_DEPT_10,
AVG(CASE WHEN DEPARTMENT_ID = 10 THEN SALARY END) AS AVG_SALARY_DEPT_10
FROM EMPLOYEES;