티스토리 뷰
6절 윈도우 함수
윈도우 함수(Window Function)
SELECT 윈도우함수(컬럼)
OVER (PARTITION BY 컬럼 ORDER BY 컬럼 윈도잉절)
FROM 테이블명;
여러 행 간의 관계 정의 함수
SQL의 행간 비교, 순위 매기기, 누적 계산 등을 수행
GROUP BY와는 다르게, 개별 행을 유지하면서 그룹 내 집계를 계산
서브쿼리보다 가독성이 좋고 성능도 우수
윈도우 함수는 OVER() 구문과 함께 사용하며, 중첩 불가능
- PARTITION BY : 그룹핑 기준
- ORDER BY : 순위 지정 기준
- 윈도잉절 : 함수의 대상이 되는 행 범위 지정
윈도우함수의 범위 지정(윈도잉절)
- BETWEEN A AND B : 구간 지정
- N PRECEDING, N FOLLOWING : N번째 앞 행, N번째 뒤 행까지 포함
- UNBOUNDED PRECEDING, UNBOUNDED FOLLOWING : 처음부터/끝까지 포함
- CURRENT ROW : 현재 행 포함
- ROWS, RANGE : 행 지정, 값의 범위 지정
순위 함수
SELECT emp_id, name, salary,
RANK() OVER (ORDER BY salary DESC) AS rank_num,
DENSE_RANK() OVER (ORDER BY salary DESC) AS dense_rank_num,
ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num
FROM Employee;
RANK : 중복 순위 포함, 같은 값이면 다음 순위 건너 뜀
DENSE_RANK : 중복 순위 무시
ROW_NUMBER : 단순히 행 번호 표시, 값에 무관하게 고유한 순위 부여
일반집계 함수
SELECT emp_id, name, department, salary,
SUM(salary) OVER (PARTITION BY department ORDER BY salary DESC) AS running_total
FROM Employee;
SUM, MAX, MIN, AVG, COUNT과 같은 집계함수를 개별 행에 유지하면서 계산
행 순서 함수
SELECT emp_id, name, salary,
LAG(salary, 1) OVER (ORDER BY salary DESC) AS prev_salary,
LEAD(salary, 1) OVER (ORDER BY salary DESC) AS next_salary
FROM Employee;
FIRST_VALUE, LAST_VALUE : 첫 값, 끝 값
LAG, LEAD : 이전 행, 이후 행 (Oracle
※ ‘LEAD(E,A)’는 E에서 A번째 행의 값을 호출하는 형태로도 쓰임 (A의 기본값은 1)
비율 관련 함수
SELECT emp_id, name, salary,
PERCENT_RANK() OVER (ORDER BY salary DESC) AS percent_rank,
CUME_DIST() OVER (ORDER BY salary DESC) AS cume_dist
FROM Employee;
PERCENT_RANK() : 백분율 순서 - 순위별 상대적 위치
CUME_DIST() : 현재 행 이하 값을 포함한 누적 백분율
NTILE(A) : 전체 데이터 A등분
RATIO_TO_REPORT : 총합계에 대한 값의 백분율
'SQL > SQLD 이론' 카테고리의 다른 글
| [SQLD] SQL 활용 : 8절 절차형 SQL (0) | 2025.03.07 |
|---|---|
| [SQLD] SQL 활용 : 7절 데이터 제어 (0) | 2025.03.07 |
| [SQLD] SQL 활용 : 5절 그룹 함수 (0) | 2025.03.07 |
| [SQLD] SQL 활용 : 4절 서브쿼리 (0) | 2025.03.07 |
| [SQLD] SQL 활용 : 3절 계층형 질의와 셀프 조인 (0) | 2025.03.07 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 레코드
- 필드
- StringBuilder
- APS
- DB
- 테이블
- DBMS
- SQL
- SQL이란
- Scanner
- BufferedWriter
- BufferedReader
- dialect
- 입출력
- oracle
- Java
- db오브젝트
- db의 역사
- 자료구조
- 데이터베이스
- 알고리즘
- 배열
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
글 보관함