[SQLD] WINDOW 함수

younghyun·2023년 6월 8일
0

SQLD

목록 보기
12/18

WINDOW FUNCTION

행과 행 간의 관계를 쉽게 정의하기 위해 만든 함수이다.
다른 함수와는 달리 중첩(NEST)해서 사용하지는 못하지만, 서브쿼리에서는 사용할 수 있다.

WINDOW FUNCTION 종류

  1. 순위 관련 함수: RANK, DENSE_RANK, ROW_NUMBER
  2. 집계 관련 함수 : SUM, MAX, MIN, AVG, COUNT
    • sql server는 OVER 절의 OREDER BY 지원 X
  3. 행 순서 관련 함수 : FIRST_VALUE, LAST_VALUE, LAG, LEAD
    • 오라클에서만 지원
  4. 비율 관련 함수 : CUME_DIST, PERCENT_RANK, NTILE, RATIO_TO_REPORT

WINDOW FUNCTION 문법

INDOW 함수에는 OVER 문구가 키워드로 필수 포함된다.

SELECT WINDOW_FUNCTION (ARGUMENTS) OVER 
( [PARTITION BY 컬럼] [ORDER BY 컬럼] [WINDOWING 절] )
FROM 테이블명 ; 
  • WINDOW_FUNCTION : 윈도우 함수
  • ARGUMENTS(인수) : 함수에 따라 0 ~ N개 인수가 지정될 수 있다.
  • PARTITION BY 절 : 전체 집합을 기준에 의해 소그룹으로 나눌 수 있다.
  • ORDER BY 절 : 어떤 항목에 대해 순위를 지정할 지 order by 절을 기술한다.
  • WINDOWING 절 : WINDOWING 절은 함수의 대상이 되는 행 기준의 범위를 강력하게 지정할 수 있다. (sql server 에서는 지원하지 않음)

그룹 내 순위 함수

  • RANK: 동일 값에 대해서는 동일 순위를 부여하고 중간 순위 비워둠
  • DENSE_RANK: 동일 값에 대해서는 동일 순위를 부여하고 중간 순위 비워두지 않음
  • ROW_NUMBER: 동일 값에 대해서도 유일한 순위를 부여함

[112번]
Partition과 Group By 구문은 의미적으로 유사하다.
Partition 구문이 없으면 전체 집합을 하나의 Partition으로 정의한다.
윈도우 함수 적용 범위는 Partition을 넘을 수 없다.

[115번]

FROM (SELECT 추천경로, 추천인, 추천점수,
             ROW_NUMBER() OVER (PARTITION BY 추천경로
             ORDER_BY 추천점수 DESC) AS RNUM
      FROM 추천 내역)
WHERE RNUM = 1;

추천경로별로 추천 점수가 가장 높은 데이터를 한건씩 출력하는 SQL이다.

[116번]
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING: 현재 행을 기준으로 파티션내 앞뒤 한건씩을 범위로 지정한다.

그룹 내 행 순서 함수

  • LAG 함수 : 파티션별 윈도우에서 이전 몇 번째 행의 값
  • LEAD 함수 : 파티션별 윈도우에서 이후 몇 번째 행의 값
profile
🌱 주니어 백엔드 개발자입니당

0개의 댓글