관리 메뉴

JIE0025

[MSSQL] 윈도우 함수 Window Function 본문

개발/Database

[MSSQL] 윈도우 함수 Window Function

Kangjieun11 2021. 4. 7. 16:14
728x90

윈도우함수(Window Function)

- 테이블의 행과 행 사이 관계를 쉽게 정의하기 위해 제공하는 함수

- OVER 절이 들어간 함수

- GROUP BY와 비슷하게 데이터를 그룹화하여 집계한다.

- GROUP BY는 집계된 결과만 보여주지만, 윈도우함수는 기존 데이터에 집계된 값을 추가해 나타냄

- GROUP BY 구문과 병행하여 사용 불가.

SELECT 윈도우함수(인수) 
OVER(
 [PARTITION BY 컬럼명]
    ORDER BY WINDOWING 절 )
FROM 테이블명;

ARGUMENTS, 인수 윈도우 함수에 따라서 0~N개의 인수를 설정한다.
PARTITION BY 전체 집합을 기준에 의해 소그룹으로 나눈다
ORDER BY 어떤 항목에 대해서 정렬한다
WINDOWING 행 기준 범위를 정함
ROWS는 물리적 결과의 행 수
RANGE는 논리적인 값에 의한 범위이다.

GROUP BY vs WINDOWS FUNCTION

GROUP BY 와 WINDOWS FUNCTION이 데이터를 어떻게 그룹화해서 집계하는지 확인해보자.

다음은 buyTBL, 예제로 사용할 테이블이다. 

 

 

buytbl

 

 

 

1) GROUP BY를 사용

SELECT userID, SUM(price) AS '총 구매 가격' 
FROM buytbl
GROUP BY userID
ORDER BY sum(price);

userID별로 묶어서 price 의 SUM() 합을 나타내는 쿼리

 

 

집계된 값이 나타나는 것 확인.

 

2) WINDOWS FUNCTION 사용

 

 

ROW_NUMBER() 등 

쿼리의 결과 행들의 집합에 대해

그 윈도우에 속해 있는 모든 행들에 대해

집합적으로 수행한 후 (집계)

스칼라 결과 값을 출력하는 함수를 말함

 

말만 보면 이해가 잘 안간다.

예제를 보며 살펴보자

 

 

table을 보면, custid에 의하여 그룹핑이 되어있다.

각각을 윈도우1(custid가 1), 윈도우2(custid가 2)라고 정의한다.

그리고 파티션이기도 하다.

 

윈도우 함수는 윈도우 각각에 대해 집계하고, 스칼라 값으로 바꿔준다.

 

ROW_NUMBER() 특정 파티션 안에 있는 행들의 순번을 출력하는 함수

 

 

 

적용되는 윈도우는

OVER절을 통해 

cust id 기준으로 파티션되고,

val 순서로 정렬된다.

 

as라는 명령어를 통해

rownum 컬럼 별칭을 사용해  ROW_NUMBER()가 표시된다는 뜻.

 

 

 

 

 

예제 2) 

 

 

 

OVER절을 통해 

cust id 기준으로 파티션되고,

val 순서로 정렬된다.

 

as라는 명령어를 통해

custidSum 컬럼 별칭을 사용해  custid의 SUM 을 표시

 

 

'개발 > Database' 카테고리의 다른 글

[MySQL] 데이터 변경 UPDATE  (0) 2021.04.13
[MySQL] 데이터 삽입 INSERT  (0) 2021.04.12
[MSSQL] TOP filter 와 정렬(ASC,DESC)  (0) 2021.04.07
[MSSQL] SELECT, MSSM 관련 개념  (0) 2021.04.07
[MSSQL] GROUP BY, HAVING 이해하기  (0) 2021.04.07