본문 바로가기

SQL/SQLD.

[SQLD] SQL활용- 윈도우 함수

728x90

윈도우 함수

윈도우 함수는 행과 행 간의 관계를 정의하기 위해 제공되는 함수이다. 윈도우 함수를 사용해 순위, 합계 , 평균, 행 위치등을 조작 할 수 있다

윈도우 함수 구조

SELECT WINDOW_FUNC(ARGUMENTS)
	OVER (PARTITION BY 컬럼
        ORDER BY WINDOWING절)
FROM 테이블명
  • ARGUMENTS(인수) - 윈도우 함수에 따라 0-N개의 인수를 설정한다
  • PARTITION BY         - 전체 집합을 기준에 의해 소그룹 으로 나눈다.
  • ORDER BY                - 어떤 항목에 대해 정렬한다.
  • WIDOWING              - 행 기준의 범위를 정한다. ROWS는 물리적 결과의 행 수이고 RANGE는 논리적인 값에 의한 범위이다.

WINDOWING

WINDOWING 절은 함수의 대상이 되는 행 기준의 범위를 강력하게 지정할 수 있다. ROWS는 물리적인 결과 행의 수를, RANGE는 논리적인 값에 의한 범위를 나타내는데, 둘 중의 하나를 선택해서 사용할 수 있다. 다만, WINDOWING 절은 SQL Server에서는 지원하지 않는다.

구조 설명
ROWS 부분 집합인 윈도우 크기를 물리적 단위로 행의 집합을 지정
RANGE 논리적인 주소에 의해 행 집합을 지정
BETWEEN ~ AND 윈도우의 시작과 끝의 위치 지정
UNBOUNDED PRECEDING 윈도우의 시작 위치가 첫 번째 행
UNBOUNDED FOLLOWING 윈도우 마지막 위치가 마지막 행
CURRENT ROW 윈도우 시작 위치가 현재 행

 

사용 예시

SELECT 
	MGR,
	ENAME,
	SAL,
	SUM(SAL) OVER(PARTITION BY MGR ORDER BY SAL RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS SUM_RANGE
FROM EMP e 

MGR |ENAME |SAL |SUM_RANGE|
----+------+----+---------+
7566|FORD  |3000|     6000| - 동일한 값이 1,2에 있기 때문에 더해짐
7566|SCOTT |3000|     6000|
7698|JAMES | 950|      950|
7698|WARD  |1250|     3450|
7698|MARTIN|1250|     3450|
7698|TURNER|1500|     4950|
7698|ALLEN |1600|     6550|
7782|MILLER|1300|     1300|
7788|ADAMS |1100|     1100|
7839|CLARK |2450|     2450|
7839|BLAKE |2850|     5300|
7839|JONES |2975|     8275|
7902|WOOK  | 800|      800|

 -> CURRENT ROW 현재 행을 기준으로 UNBOUNDED PRECEDING 첫번째 행까지 범위를 지정하며 값이 같으면 동일한 행으로 본다

 

순위 함수

ANSI/ISO 표준 기준  ORACLE, SQL SERVER등 다른 RDBMS에서도 지원하는 기능이다.

RANK

RANK 함수는 ORDER BY를 포함한 QUERY 문에서 특정 항목(칼럼)에 대한 순위를 구하는 함수이다. 이때 특정 범위(PARTITION) 내에서 순위를 구할 수도 있고 전체 데이터에 대한 순위를 구할 수도 있다.

동일값에 대해서는 동일 순위 부여하고  중복 순위 다음은 해당 개수만큼 증가한다.

RANK() OVER (PARTITION BY JOB ORDER BY SAL DESC)

 -> JOB을 파티션으로 만들고 JOB별 순위를 조회한다.

DENSE_RANK

동일한 순위를 하나의 건수로 계산한다.

ROW_NUMBER

동일한 순위에 대해서 고유의 순위를 부여한다.

 

집계 함수

집계 함수 설명
SUM 파티션 별로 합계 계산
AUG 파티션 별로 평균 계산
COUNT 파티션 별로 행 수 계산
MAX/ MIN 파티션 별로 최댓값과 최솟값 계산

행 순서 관련 함수

행 순서 관련 함수는 상위 행의 값을 하위에 출력하거나 하위 행의 값을 상위 행에 출력할 수 있고, 특정 위치의 행도 출력 할 수 있다.

행 순서 설명
FIRST_VALUE - 파티션에서 가장 처음에 나오는 값
- MIN함수 결과값과 같은 결과
LAST_VALUE - 파티션에서 가장 나중에 나오는 값
- MAX함수 결과값과 같은 결과
LAG - 이전 행
LEAD - 윈도우에서 특정 위치의 행을 가지고오며 기본값은 1이다.

 

비율 관련 함수

비율 관련 함수는 누적 백분율, 순서별 백분율, 파티션을 N분으로 분할할 결과 등을 조회할 수 있다.

비율 함수 설명
CUME_DIST - 파티션 전체 건수에서 현재 행보다 작거나 같은 건수에 대한 누적 백분율을 조회한다
- 누적 분포상에 위치를 0~1 사이의 값을 가진다
PERCENT_RANK - 파티션에서 제일 먼저 나온 것을 0, 제일 늦게 나온 것을 1로 하여 값이 아닌 행의 순서별 백분율을 조회한다
NTITLE - 파티션별로 전체 건수를 ARGUMENT 값으로 N등분 결과를 조회한다
RATIO_TO_REPORT - 파티션 내에 전체 SUM(컬럼)에 대한 행 별 컬럼값의 백분율을 소수점까지 조회한다
728x90
반응형

'SQL > SQLD.' 카테고리의 다른 글

[SQLD] SQL활용 - 파티션  (0) 2023.03.17
[SQLD] SQL활용 - GROUP 함수  (0) 2023.03.17
[SQLD] SQL 활용 - 서브쿼리(Subquery)  (0) 2023.03.17
[SQLD] SQL 활용 - 계층형 쿼리  (0) 2023.03.17
[SQLD] SQL 활용 - JOIN  (0) 2023.03.17