-
[함수-다중행 함수]윈도우 함수SQLD/함수 2023. 8. 28. 18:30
윈도우 함수
1)윈도우 함수의 기본 구문
SELECT 윈도우 함수(인자) OVER([PARTITION BY 컬럼][ORDER BY절][WINDOWING 절]) FROM 테이블명
❗️윈도우 함수는 반드시 OVER 키워드와 함께 사용된다.
- 인자 : 함수에 따라 0~N개의 인자를 지정 가능
- PARTITION BY : 전체 집합을 소그룹으로 지정하여 나눌 수 있다.
- ORDER BY절 : 어떤 항목에 대해 순위를 지정할 지 ORDER BY절을 기술한다.
- WINDOWING절 : 집계하려는 데이터의 범위를 지정할 수 있다. 오라클에서만 사용 가능하다.
*WINDOWING절
범위 의미 UNBOUNDED PRECEDING 위쪽 끝 행 UNBOUNDED FOLLOWING 아래쪽 끝 행 CURRENT ROW 현재 행 n PRECEDING 현재 행에서 위로 n만큼 이동 n FOLLOWING 현재 행에서 아래로 n만큼 이동 기준 의미 ROWS 행 자체가 기준이 된다. RANGE 행이 가지고 있는 데이터 값이 기준이 된다. *WINDOWING절 기본 구문
--처음부터 현재 행 까지 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW --현재 행부터 끝까지 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
2)윈도우 함수의 분류
윈도우 함수는 역할에 따라 크게 4가지로 나눌 수 있다.
분류 종류 순위 함수 RANK
DENSE_RANK
ROW_NUMBER집계 함수 SUM
MAX
MIN
AVG
COUNT행 순서 함수(오라클) FIRST_VALUE
LAST_VALUE
LEG
LEAD비율 함수(오라클) PERCENT_RANK
RATIO_TO_PEPORT
CUME_DIST
NTILE1️⃣순위 함수
- 순위를 구하는데 사용하는 함수.
- 세 개의 함수 모두 동일한 동작을 수행 하지만 공동 순위 처리 방식이 다르다.
순위 함수 설명 RANK 공동 순위를 개별적인 존재로 취급하고 존재하는 수 만큼 다음 순위를 건너뛴다.
EX) 1위 (2위) (2위) 4위 5위DENSE_RANK RANK와 동일한 동작을 하지만 공동 순위에 대한 처리 방식이 다르다.
공동 순위를 하나의 묶음으로 취급하고 다음 순위를 건너뛰지 않고 이어서 매긴다.
EX) 1위 (2위 2위) 3위 4위ROW_NUMBER 공동 순위가 있더라도 각기 다른 유니크한 순위를 부여한다.
ORDER BY절을 통해서 동일한 값에 대한 순서를 관리할 수 있다.예제
1.사원 테이블에서 급여가 가장 높은 순서를 구하기
SELECT E_NAME,RANK()OVER(ORDER BY SAL DESC) FROM EMP;
2.PARTITION BY절을 사용하여 그룹 내 순위를 구할 수 있다.
SELECT E_NAME,RANK()OVER(PARTITION BY JOB ORDER BY SAL DESC) FROM EMP;
2️⃣집계 함수
집계 함수 설명 SUM 파티션별 합을 구할 수 있다. MAX 파티션별 최대값을 구할 수 있다. MIN 파티션별 최소값을 구할 수 있다. AVG 파티션별 평균을 구한다. COUNT 파티션별 카운트 ❗️일반 집계함수 와 윈도우함수의 집계함수
- 일반 적인 집계함수는 전체 테이블의 데이터를 집계하여 하나의 결과를 반환한다.
- 윈도우 함수의 경우 데이터를 행 단위로 분석을 하면서 각 행에 대한 개별적인 계산을 한다.
예제
1.일반적인 집계함수의 사용
SELECT SUM(SCORE) as TOTAL_SCORE FROM REVIEW;
2.윈도우 함수의 사용
SELECT user_name, movie, score, SUM(SCORE) OVER(partition by user_name)as TOTAL_SCORE FROM REVIEW;
3.오라클에서는 ORDER BY절을 사용해서 누적값을 구할 수 있다.
SELECT user_name, movie, score, SUM(SCORE) OVER(partition by user_name ORDER BY SCORE DESC)as TOTAL_SCORE FROM REVIEW;
3️⃣행 순서 함수
오라클에서만 사용 가능하다.
행 순서 함수 설명 FIRST_VALUE 파티션별 윈도우에서 가장 먼저 나온 값을 구한다.
MIN함수를 사용하여 같은 결과를 얻을 수 있다.
동일한 값이 존재한다면 OVER안에 ORDER BY 정렬 조건을 추가한다.)LAST_VALUE 파티션별 윈도우에서 가장 나중에 나온 값을 구한다.
MAX함수를 사용하여 같은 결과를 얻을 수 있다.LAG 파티션별 이전 몇 번째 행의 값을 가져올 수 있다.
LAG(컬럼[,앞에서 가져올 행][,NULL일경우 지정할 값])
-두 번째 인자 : 몇 번째 앞의 행을 가져올지 결정 Default값은 1이다.
-세 번째 인자 : 파티션의 첫 번째 행은 앞에 값이 없기 때문에 NULL일 경우 들어올 값을 지정LEAD 파티션별 이후 몇 번째 행의 값을 가져올 수 있다.
LEAD(컬럼[,뒤에서 가져올 행][,NULL일경우 지정할 값])
LAG와 마찬가지로 세 개의 인자를 받고 동일한 역할.4️⃣비율 함수
오라클에서만 사용 가능
비율 함수 설명 RATIO_TO_REPORT 파티션별 합계에서 차지하는 비율을 구하는 함수 PERCENT_RANK 파티션별 제일 먼저 나오는 것을 0으로, 제일 늦게 나오는 것을 1로 한다.
값이 아닌 행의 순서별 백분율을 구한다.CUME_DIST 파티션별 전체건수에서 현재 행보다 작거나 같은 건수에 대한 누적백분율 구한다. NTILE 주어진 수 만큼 행들을 n등분한 후 현재 행에 해당하는 등급을 구하는 함수 'SQLD > 함수' 카테고리의 다른 글
[함수-다중행 함수]그룹 함수-집계,소계 (0) 2023.08.26 [함수-단일행 함수]NULL관련 함수,CSAE구문 (0) 2023.08.23 [함수-단일행함수]날짜함수와 변환함수 (0) 2023.08.23 [함수-단일행함수]숫자형 함수 (0) 2023.08.23 [함수-단일행함수]문자형 함수 (0) 2023.08.22