SQLD 2-2-4 윈도우 함수

김희영·2026년 1월 21일

SQLD

목록 보기
23/27

윈도우 함수

  • 조인, 서브쿼리 없이 행과 행간 비교, 연산하게 해줌
  • 각 행 유지하며 연산 가능 (GROUP BY 안해도 OK)
SELECT 컬럼,
	윈도우 함수(컬럼) OVER (정렬 또는 조건) AS 결과
FROM 테이블명;
  • 윈도우 함수 안에 집계, 순위 함수 같은 걸 넣는다.
    • PARTITION BY : 그룹 연산 수행할 그룹 지정
    • ORDER BY : 순위 함수 쓸 거면 필수. 집계함수에서는 누적값 출력할 때 쓴다.
    • ROWS, RANGE BETWEEN A AND B : 연산 범위 설정. OREDER BY랑 같이 씀. (RANGE는 SQL SERVER는 사용 불가)
  • 순서 틀리면 오류 난다

일반 집계 함수

  • SUM, AVG, COUNT, MAX, MIN 등의 함수를 사용할 수 있다.
  • OREDER BY가 없을 경우 합은 누적으로 계산하지 않는다.
    -> 전부 같은 값으로 나온다는 소리

연산 범위 설정

  • ROWS : 같은 값도 각 행씩 연산

  • RANGE : 같은 값은 묶어서 연산 (이게 기본값!)

  • BETWEEN A AND B

    • A
      • CURRENT ROW : 현재 행부터
      • UNBOUNDED PRECDING : 처음부터
      • N PRECEDING : N 이전부터
    • B
      • CURRENT ROW : 현재까지
      • UNBOUNDED FOLLOWING : 마지막까지
      • N FOLLOWING : N 이후까지

순위 함수

  • ROW_NUMBER() : 1위부터 순차적으로 순위 부여
  • RANK() : 동일 값에 같은 순위 부여 (그 다음은 건너 뜀)
    -> 1,2,2,4 ...
  • DENSE_RANK() : 동일 값에 같은 순위
    -> 1,2,2,3,4...

+) 특정 값의 순위 구하기
SELECT RANK(값) WITHIN GROUP(ORDER BY 컬럼);

행 순서 관련 함수

LAG, LEAD

  • 둘다 SQL SERVER는 사용 불가
  • OREDER BY 필수
  • LAG : 이전 행 값 가져오기
  • LEAD : 이후 행 값 가져오기
  • 가져올 값이 없으면 null
    -> LAG(컬럼, 가져올 값, null 대체 값)으로 null 대체 가능

FIRST_VALUE, LAST_VALUE

  • 정렬된 범위내 첫번째, 마지막 리턴
  • PARTITON, ORDER BY 생략 가능

NTILE(N)

  • 행을 N개의 그룹으로 나눔
  • ORDER BY 필수
  • SQL SERVER에서는 사용 불가
  • 나눠지지 않으면 앞 그룹이 더 커짐
    -> NTILE(2) OVER(ORDER BY NAME) AS GROUP_NAME 했는데 행이 5개면 3, 2 분할

비율 관련 함수

  • SQL SERVER는 안됨

RATION_TO_REPORT

  • 파티션 내 전체 합에 대한 한 컬럼의 비율
  • 파티션이 없으면 전체에 대한 비율
  • OREDER BY 불가

PERCENT_RANK

  • 파티션 별 윈도우에서 행의 순서별 백분위 리턴 (0:가장 먼저, 1: 가장 나중)
  • ORDER BY 필수

CUME_DIST

  • 파티션 별 윈도우에서 현재 행보다 작거나 같은 건수에 대한 누적 백분율
    -> 5개중 2번째는 0.2
profile
내는 반드시 개발자가 되고 말것어

0개의 댓글