프로그래밍/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;