파게로그

window function 본문

콤퓨타 왕기초/SQLD/JDBC/Oracle DB

window function

파게 2021. 3. 22. 15:05

window function

SELECT WINDOW_FUNCTION(ARGUMENTS)
OVER (
    <PARTITION BY절> -- GROUP BY 같은 역할. 전체 집합을 기준에 의해 소그룹으로 나눔
    <ORDER BY절> -- ORDER BY 역할. 어떤 항목에 대해서 정렬
    <WINDOWING절> -- WHERE 역할. 행 기준의 범위를 정함. ROWS: 물리적 결과의 행 수, RANGE: 논리적인 값에 의한 범위
)
FROM 테이블명;

 

window function의 구조

SELECT empno, ename, sal, SUM(sal)
OVER (
    ORDER BY sal
    ROWS BETWEEN UNBOUNDED PRECDING AND CURRENT ROW
) totsal
FROM emp; -- 행 별로 누적 합계를 구함
  • PARTITION BY절
    - GROUP BY 같은 역할
    - 전체 집합을 기준에 의해 소그룹으로 나눔
  • ORDER BY절
    - ORDER BY 역할
    - 어떤 항목에 대해서 정렬
  • WINDOWING절
    - WHERE 역할
    - 행 기준의 범위를 정함
    - ROWS: 물리적 결과의 행 수. 부분집합인 윈도우 크기를 물리적 단위로 행의 집합을 지정
    - RANGE: 논리적인 값에 의한 범위. 논리적인 주소에 의해 행 집합을 지정
    - BETWEEN ~ AND: 윈도우의 시작과 끝의 위치를 지정
    - UNBOUNDED PRECDING: 윈도우의 시작 위치가 첫 번째 행임
    - UNBOUNDED FOLLOWING: 윈도우의 마지막 위치가 마지막 행임
    - CURRENT ROW: 윈도우 시작 위치가 현재 행임

 

순위 함수

  • RANK
    - 특정 항목 및 파티션에 대해서 순위를 계산
    - 동일한 순위는 동일한 값이 부여됨 ( 1 2 2 4 )
  • DENSE_RANK
    - 동일한 순위를 하나의 건수로 계산 ( 1 2 2 3 )
  • ROW_NUMBER
    - 동일한 순위에 대해서 고유의 순위를 부여 ( 1 2 3 4 )

 

집계 함수

  • SUM
    - 파티션 별로 합계 계산
  • AVG
    - 파티션 별로 평균 계산
  • COUNT
    - 파티션 별로 행 수 계산
  • MAX, MIN
    - 파티션 별로 최댓값, 최솟값 계산

 

행 순서 관련 함수

  • FIRST_VALUE
    - 파티션에서 가장 처음에 나오는 값
    - MIN 함수를 사용해서 같은 결과를 구할 수 있음
  •  LAST_VALUE
    - 파티션에서 가장 나중에 나오는 값
    -  MAX 함수를 사용해서 같은 결과를 구할 수 있음
  • LAG
    - 이전 행을 가지고 옴
  • LEAD
    - 윈도우에서 특정 위치의 행을 가지고 옴
    - 기본값은 1

 

비율 관련 함수

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

'콤퓨타 왕기초 > SQLD/JDBC/Oracle DB' 카테고리의 다른 글

optimizer와 실행 계획  (0) 2021.03.22
table partition  (0) 2021.03.22
group function  (0) 2021.03.21
subquery  (0) 2021.03.21
계층형 조회(CONNECT BY)  (0) 2021.03.21
Comments