본문 바로가기

DB(SQL)

[DB] group 함수 vs window 함수

반응형

✅ 1. 정의


🔹 그룹 함수 (GROUP FUNCTION)

  • GROUP BY 절과 함께 사용되어 데이터를 그룹 단위로 묶고, 각 그룹에 대해 집계값을 계산합니다.
  • 대표 함수: SUM(), AVG(), MAX(), MIN(), COUNT()

🔹 윈도우 함수 (WINDOW FUNCTION)

  • OVER() 절과 함께 사용되어 전체 데이터를 유지한 채 각 행을 기준으로 집계, 순위, 누적값 등을 계산합니다.
  • 대표 함수: ROW_NUMBER(), RANK(), DENSE_RANK(), SUM() OVER, LAG(), LEAD()

✅ 2. 사용하는 이유

이유 그룹함수 윈도우 함수
데이터를 요약/집계하고 싶을 때
각 행을 유지하면서 분석 정보 추가
순위/누적합/이전 값/비교 분석
필터링 없이 평균값 등 비교

✅ 3. 사용 시기

그룹 함수가 적합한 경우

  • 요약 통계가 필요한 리포트나 대시보드 작성
  • 특정 그룹 단위의 집계 결과만 필요할 때

윈도우 함수가 적합한 경우

  • 개별 행을 유지하면서 순위, 누적합, 변화량 등을 같이 보여주고 싶을 때
  • 서브쿼리 없이 집계값과 원본 데이터를 함께 보고 싶을 때
  • 특정 기준으로 정렬된 데이터에서 과거 또는 미래의 값을 참조해야 할 때

✅ 4. 사용법 예시

4.1 그룹 함수

SELECT department_id, SUM(salary)
FROM employees
GROUP BY department_id;

→ 부서별 총 급여만 출력


4.2 윈도우 함수 기본 문법

<함수명>(<컬럼>) OVER (
    [PARTITION BY <컬럼>]
    [ORDER BY <컬럼>]
    [ROWS BETWEEN ...]
)

4.3 윈도우 함수 예시

▶ 각 부서 내에서 입사일 순으로 순번 매기기

SELECT employee_id, department_id, 
       ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY hire_date) AS row_num
FROM employees;

▶ 급여 순위 계산

SELECT employee_id, salary, 
       RANK() OVER (ORDER BY salary DESC) AS salary_rank
FROM employees;

▶ 부서별 총 급여를 각 행에 표시

SELECT employee_id, department_id, salary, 
       SUM(salary) OVER (PARTITION BY department_id) AS total_per_dept
FROM employees;

▶ 전 직원 급여와 비교

SELECT employee_id, salary, 
       LAG(salary, 1) OVER (ORDER BY hire_date) AS prev_salary
FROM employees;

✅ 5. 핵심 차이 정리

항목 그룹 함수 윈도우 함수

출력 행 수 그룹당 1개 원본 행 수 유지
다른 컬럼과의 병행 출력 제한 있음 자유로움
순위/누적합 지원 제한적 강력
주 용도 그룹별 요약 개별 행의 분석 및 비교

✅ 6. 요약

  • 그룹 함수는 요약 통계에 적합
  • 윈도우 함수는 행 단위 분석, 비교, 순위, 누적값 계산에 유용
  • 윈도우 함수는 OVER() 절을 통해 집계 결과를 각 행에 덧붙이는 방식

→ 윈도우 함수는 집계 정보를 잃지 않으면서 데이터 분석력을 강화하는 도구입니다.**

반응형