Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

dongdorodongdong

윈도우 함수 본문

SQLD

윈도우 함수

d5ngs 2019. 10. 25. 15:19

정의

  • 행과 행간의 관계를 쉽게 정의하기 위해 만든 함수
  • 결과에 대한 함수처리이기 때문에 결과 건수는 줄지 않음
  • 적용 범위는 PARTITION을 넘을 수 없음

종류
  • 순위 관련 함수
    - RANK
    - DENSE_RANK
    - ROW_NUMBER

  • 집계 관련 함수
    - SUM
    - MAX, MIN
    - AVG, COUNT

  • 행 순서 관련 함수
    - FIRST_VALUE, LAST_VALUE (Oracle)
    - LAG (Oracle)
    - LEAD (Oracle)

  • 비율 관련 함수
    - CUME_DIST (ANSI, Oracle)
    - PERCENT_RANK (ANSI, Oracle)
    - NTILE (Oracle, SQL Server)
    - RATIO_TO_REPORT (Oracle)

구문
-
SELECT 윈도우함수(ARGUMENTS) OVER
(
    PARTITION BY 컬럼
    ORDER BY ASC / DESC
    ROWS / RANGE
    BETWEEN UNBOUNDED PRECEDING / n PRECEDING / CURRENT ROW
    AND UNBOUNDED FOLLOWING / n FOLLOWING / CURRENT ROW
)

FROM 테이블명
  • ARGUMENTS
    - 함수에 따라 0~N개의 인수
  • PARTITION BY 절
    - 전체 집합을 기준에 따라 소그룹으로 나눌 수 있음
    - 의미상 GROUP BY구문과 유사
    - PARTITION 구문이 없으면 전체 집합을 하나의 PARTITION으로 정의한 것과 동일
  • ORDER BY 절
    - 어떤 항목에 대해 순위를 지정할 지 ORDER BY절을 기술
  • WINDOWING 절
    - 함수의 대상이 되는 행 기준의 범위를 강력하게 지정
    - SQL Server는 지원X
    - ROWS (물리적인 ROW 단위로 행 집합 지정)
    - RANGE (논리적인 상대번지로 행 집합 지정)
    - BETWEEN ~ AND (윈도우의 시작과 끝 지정)
    - UNBOUNDED PRECEDING (PARTITION의 첫번째 ROW에서 윈도우 시작)
    - UNBOUNDED FOLLOWING (PARTITION의 마지막 ROW에서 윈도우 시작)
    - CURRENT ROW (윈도우의 시작이나 끝 위치가 현재 ROW)


순위 함수
  • RANK 함수
    - 특정 컬럼, 특정 범위(PARTITION), 전체 데이터에 대한 순위를 구함
    - 동일한 값에 대해서는 동일한 순위를 부여
    - 동일한 순위를 각각의 건수로 취급(중간 순위를 비움)

  • DENCS_RANK 함수
    - RANK함수와 흡사
    - 동일한 순위를 하나의 건수로 취급하는 것이 다름(중간 순위를 비우지 않음)

  • ROW_NUMBER 함수
    - 동일한 값이라도 고유한 순위를 부여

일반 집계 함수
  • SUM, MAX, MIN, AVG, COUNT

그룹 내 행 순서 함수
  • FRIST_VALUE 함수
    - 범위별 윈도우에서 가장 먼저 나온 값을 구함
    - MIN 함수를 활용하여 같은 결과를 얻을 수 있음
    - UNBOUNDED PRECEDING : 현재 행을 기준으로 범위 내의 첫 번째 행까지의 범위를 지정
    - SQL Server는 지원X

  • LAST_VALUE 함수
    - 범위별 윈도우에서 가장 나중에 나온 값을 구함
    - MAX 함수를 활용하여 같은 결과를 얻을 수 있음
    - ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING : 현재 행을 포함해서 범위 내의 마지막 행까지의 범위를 지정
    - SQL Server는 지원X

  • LAG 함수
    - 범위별 윈도우에서 이전 몇 번째 행의 값을 가져올 수 있음
    - SQL Server는 지원X

  • LEAD 함수
    - 범위별 윈도우에서 이후 몇 번째 행의 값을 가져올 수 있음
    - SQL Server는 지원X

그룹 내 비율 함수
  • RATIO_TO_REPORT 함수
    - 범위 내 전체 SUM(컬럼)값에 대한 행별 컬럼 값의 백분율을 소수점으로 구함
    - 0 < 결과값 <=1
    - 개별 RATIO의 합 = 1

  • PERSENT_RANK 함수
    - 범위 내 윈도우에서 제일 먼저 나오는 것을 0으로 제일 늦게 나오는 것을 1로하여, 값이 아닌 행의 순서별로 백분율을 구함
    - 0 < 결과값 <=1
    - SQL Server는 지원X

  • CUME_DIST 함수
    - 범위 내 윈도우의 전체건수에서 현재 행보다 작거나 같은 건수에 대한 누적 백분율
    - 0 < 결과값 <=1
    - SQL Server는 지원X

  • NTITLE 함수
    - 범위별 전체 건수를 ARGUMENT 값으로 N 등분한 결과


'SQLD' 카테고리의 다른 글

절차형 SQL  (0) 2019.10.25
DCL  (0) 2019.10.25
그룹함수  (0) 2019.10.25
서브쿼리  (0) 2019.10.25
계층형 질의 / 셀프 조인  (0) 2019.10.25