OVER() 함수 활용

Minsu Kang·2025년 4월 9일

✅ 1. COUNT() (집계 함수)

전체 그룹에 대해 집계된 결과 1개만 반환

GROUP BY와 함께 자주 사용됨

-- 예: 부서별 인원 수 구하기
SELECT department_id, COUNT(*) AS dept_count
FROM employees
GROUP BY department_id;

결과: 각 부서별로 한 줄씩, 부서 인원 수 출력됨
👉 각 부서가 하나의 "그룹"이기 때문에, COUNT()는 그룹 단위로 동작함

SELECT empno, sal, deptno, SUM(sal) OVER(PARTITION BY deptno) 
    FROM emp;

근데 Partition BY를 써야 Group By처럼 분석함수를 집계함수로써 쓸 수 있음.

SELECT empno, sal FROM emp ORDER BY empno;

SELECT empno, sal, sum(sal) OVER
    (ORDER BY empno) sum_sal
    FROM emp;
    
SELECT empno, sal, row_number() over (order by sal) sum_sal 
    FROM emp; -- 그냥 숫자를 채우는데 같은 숫자면 공동순위로 12 3 44 6 이렇게

SELECT empno, sal, dense_rank() over (order by sal) sum_sal
    FROM emp; -- dense_rank로 하면 1 2 3 44 5 6 이렇게
    

COUNT() OVER() (윈도우 함수)

-- 예: 부서별 인원 수를 모든 행에 표시
SELECT employee_id, department_id,
       COUNT(*) OVER(PARTITION BY department_id) AS dept_count
FROM employees;

📌 결과: 모든 사원의 정보에 자신이 속한 부서의 인원 수가 같이 붙어서 나옴
👉 행 개수는 그대로 유지되며, 부서별 인원 수가 반복적으로 표시됨

즉, 출력 행수를 그대로 유지!

OVER()는 RANK(), ROW_NUMBER(), SUM(), AVG() 등 여러 함수와 함께 사용 가능

PARTITION BY는 그룹 단위를 지정

ORDER BY는 윈도우 내 정렬 기준 지정

profile
안녕하세요! 강민수입니다.

0개의 댓글