반응형
✅ 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() 절을 통해 집계 결과를 각 행에 덧붙이는 방식
→ 윈도우 함수는 집계 정보를 잃지 않으면서 데이터 분석력을 강화하는 도구입니다.**
반응형
'DB(SQL)' 카테고리의 다른 글
[DB] DB Monitoring의 시작.. (일기) (1) | 2024.01.15 |
---|---|
[DB] CTE(Common Table Expression)와 파생테이블(derived table) (feat. with) (0) | 2024.01.11 |
[DB] 달력 DB 구조는 어떻게 구성 할까? (sqlshack Calendar) (0) | 2024.01.09 |
[DB] SQL SECURITY of PROCEDURE (DEFINER | INVOKER) (feat. mariadb | mysql) (0) | 2023.09.13 |
[DB] 로그파일 분할 (feat. Docker) (0) | 2022.12.08 |