[SQL] window function

qwe8851·2022년 8월 25일
0

🗄️ DB

목록 보기
9/9
post-thumbnail

참고 : https://velog.io/@yewon-july/Window-Function

아직 자 이해가 안감

윈도우함수란?

  • 행 간의 관계를 정의하기 위해 제공되는 함수
  • 순위, 합계, 평균, 행 위치 등을 조작할 수 있다.
  • GROUP BY와 병행 사용 안됨
  • 윈도우함수로 인해 결과 건수가 줄어들지 않음.
  • window함수의 PARTITIONGROUP BY는 둘 다 파티션을 분할한다는 의미에서 유사
  • SUM, MAX, MIN과 같은 집계 윈도우 함수를 사용할 때 윈도우 절과 함꼐 사용하면
    집계 대상이 되는 레코드 범위를 지정 가능 함

구조

SELECT WINDOW_FUNCTION(ARGUMENTS)
	OVER (PARTITION BY 칼럼
    	  ORDER BY WINDOWING절)
FROM 테이블명;
구조설명
ARGUMENT(인수)윈도우 함수에 따라서 0~N개의 인수를 설정
PARTITION BY전체 집합을 기준에 의해 소그룹으로 나눔
ORDERY BY어떤 항목에 대해서 정렬
*WINDOWING- 행 기준 범위를 정함
- ROWS는 물리적 결과의 행 수 이고 RANGE는 논리적인 값에 의한 범위



*WINDOWING

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

WINDOWING 예시

전체 합계

SELECT EMPNO, ENAME, SAL
SUM(SAL) OVER (ORDER BY SAL
	ROWS BETWEEN UNBOUNDED PRECEDING
    AND UNBOUNDED FOLLOWING) TOTAL
FROM EMP;
  • UNBOUNDED PRECENDING : 처음 행
  • UNBOUNDED FOLLOWING : 마지막 행
  • ∴TOTSAL은 처음부터 마지막까지의 합계(SUM(SAL))를 계산한 것

누적 합계

SELECT EMPNO, ENAM, SAL
SUM(SAL) OVER(ORDER BY SAL
	ROWS BETWEEN UNBOUNDED PRECENDING
    AND CURRENT ROW)TOTSAL
FROM EMP;
  • 처음부터 CURRENT ROW까지의 합계 계산 (누적합계)
  • 1번째 행의 값이 이엇으면 1,
    2번째 행의 값이 2였으면 1+2 = 3,
    3번째 행의 값이 3이었으면 1+2+3 = 6

행 순서 관련 함수

  • 행 순서 관련 함수는 상위 행 값을 하위에 출력하거나 하위 행 값을 상위 행에 출력할 수 있따.
  • 특정 위치의 행을 출력할 수 있음.
행 순서설명
FIRST_VALUE- 파티션에서 가장 처음 나오는 값을 구함
- MIN 함수를 사용해 같은 결과를 구할 수 있음
LAST_VALUE- 파티션에서 가장 나중에 오는 값을 구함
LAG- 이전 행을 가져옴
LEAD- 윈도우에서 특정 위치 행을 가져옴
- 기본값 1
profile
FrontEnd Developer with React, TypeScript

0개의 댓글