메뉴 여닫기
개인 메뉴 토글
로그인하지 않음
만약 지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
Oracle (토론 | 기여)님의 2025년 5월 12일 (월) 13:04 판 (새 문서: 좋습니다! Oracle SQL의 윈도우 함수(Window Function) 는 매우 강력한 기능으로, 행(row)들을 그룹으로 묶어 집계 또는 분석을 수행하면서도 행 단위로 결과를 반환합니다. 아래에 윈도우 함수의 개념, 주요 함수 종류, 설명, 사용 예제를 함께 정리하고, 미디어위키 표 형식으로도 제공합니다. ⸻ ✅ 윈도우 함수란? • 일반적인 집계 함수(SUM, AVG, COUNT, 등)는 여러 행을 하나...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

좋습니다! Oracle SQL의 윈도우 함수(Window Function) 는 매우 강력한 기능으로, 행(row)들을 그룹으로 묶어 집계 또는 분석을 수행하면서도 행 단위로 결과를 반환합니다. 아래에 윈도우 함수의 개념, 주요 함수 종류, 설명, 사용 예제를 함께 정리하고, 미디어위키 표 형식으로도 제공합니다.

✅ 윈도우 함수란? • 일반적인 집계 함수(SUM, AVG, COUNT, 등)는 여러 행을 하나로 집계합니다. • 윈도우 함수는 집계를 하되, 각 행마다 결과를 계산해서 반환합니다. • OVER() 절을 사용하며, PARTITION BY, ORDER BY, ROWS BETWEEN 등을 조합하여 정교한 분석이 가능합니다.

✅ 사용 구문 기본 형태

<함수명>(컬럼) OVER (

 PARTITION BY ...   -- 그룹핑 기준
 ORDER BY ...       -- 정렬 기준
 ROWS BETWEEN ...   -- 분석 범위

)


✅ 대표적인 윈도우 함수 목록 (미디어위키 표 형식)

Oracle 윈도우 함수 종류와 예제
함수명 설명 예제 SQL 설명 결과
ROW_NUMBER() 파티션 내 행 번호를 순서대로 부여

SELECT EMP_NAME, ROW_NUMBER() OVER (PARTITION BY DEPT_ID ORDER BY SALARY DESC) AS RN FROM EMPLOYEE; || 각 부서별 급여 내림차순 순위 (중복 순위 없음)

RANK() 동점자에게 같은 순위를 부여하고 다음 순위는 건너뜀

SELECT EMP_NAME, RANK() OVER (PARTITION BY DEPT_ID ORDER BY SALARY DESC) AS RANK FROM EMPLOYEE; || 부서 내 급여 순위 (동점자 동일 순위)

DENSE_RANK() RANK와 비슷하지만 순위를 건너뛰지 않음

SELECT EMP_NAME, DENSE_RANK() OVER (PARTITION BY DEPT_ID ORDER BY SALARY DESC) AS DRANK FROM EMPLOYEE; || 순위에 공백 없이 채워짐

LAG() 현재 행 기준 이전 행의 값을 가져옴

SELECT EMP_NAME, SALARY, LAG(SALARY) OVER (ORDER BY EMP_ID) AS PREV_SAL FROM EMPLOYEE; || 이전 직원의 급여 정보 확인

LEAD() 현재 행 기준 다음 행의 값을 가져옴

SELECT EMP_NAME, SALARY, LEAD(SALARY) OVER (ORDER BY EMP_ID) AS NEXT_SAL FROM EMPLOYEE; || 다음 직원의 급여 정보 확인

SUM(), AVG(), COUNT(), MAX(), MIN() 집계 함수도 윈도우와 함께 사용 가능

SELECT EMP_NAME, SALARY, AVG(SALARY) OVER (PARTITION BY DEPT_ID) AS AVG_SAL FROM EMPLOYEE; || 부서별 평균 급여

FIRST_VALUE(), LAST_VALUE() 파티션 내 정렬 기준 첫/마지막 값 반환

SELECT EMP_NAME, SALARY, FIRST_VALUE(SALARY) OVER (PARTITION BY DEPT_ID ORDER BY SALARY DESC) AS TOP_SAL FROM EMPLOYEE; || 부서별 최고 급여


✅ 추가 예제: 누적합(Cumulative Sum)

SELECT EMP_NAME, SALARY,

 SUM(SALARY) OVER (PARTITION BY DEPT_ID ORDER BY SALARY) AS CUM_SAL

FROM EMPLOYEE;

부서별 급여 누적합을 계산합니다.

✅ 윈도우 프레임 옵션

ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW

의미 설명 UNBOUNDED PRECEDING 현재 파티션의 맨 처음부터 CURRENT ROW 현재 행까지 1 PRECEDING, 1 FOLLOWING 앞뒤 1행까지 포함한 범위

예:

SUM(SALARY) OVER (

 PARTITION BY DEPT_ID 
 ORDER BY SALARY 
 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW

)

부서별로 급여 순으로 정렬하고, 현재 행까지 누적된 급여 합계를 구합니다.

✅ 정리 요약 • 윈도우 함수는 분석용 SQL에서 매우 중요합니다. • OVER() 절로 집계 범위를 제한하며, 집계 결과를 각 행에 붙여서 반환합니다. • RANK, ROW_NUMBER, LAG/LEAD, FIRST_VALUE 등 다양하게 활용 가능합니다.

더 복잡한 예제로 윈도우 함수 + 서브쿼리 + 조건 분기 조합도 가능합니다. 필요하시면 고급 실무 예제도 만들어드릴게요! 원하시는 시나리오가 있으신가요? 💡