2-2-4. 윈도우 함수

박은서's avatar
Mar 01, 2026
2-2-4. 윈도우 함수

1. 윈도우 함수의 개요

1️⃣ 윈도우 함수의 기초 개념

1) 윈도우 함수

  • 윈도우 : 전체 데이터 중 특정한 부분만 발췌해서 보기 때문에 마치 창문을 통해 보는 것과 비슷하다는 의미에서 유래
  • 고급 레벨의 SQL기능
  • 보고서 작성 및 데이터 분석 등에서 매우 많이 활용됨 (분석 함수라고도 불림)
  • 전체 데이터의 행들을 파티션으로 나누어 영역을 설정하고, 그 영역 안에서 행과 행 간의 관계를 쉽게 정의하기 위해 만들어진 함수
  • 데이터 분석과 집계에 강력한 도구, 데이터베이스 내의 행을 비교하고 계산하는 다양한 방식으로 사용할 수 있음 → 복잡한 분석 작업을 효율적으로 수행

2️⃣ 윈도우 함수의 종류

1) 순위 함수

함수
설명
ROW_NUMBER()
각 파티션 내에서 고유한 순위 부여
RANK()
동일 값에 같은 순위, 다음 순위 건너뜀
DENSE_RANK()
동일 값에 같은 순위, 다음 순위 연속

2) 집계 함수

함수
설명
SUM()
합계 계산
AVG()
평균 계산
COUNT()
행 수 계산
MAX()
최댓값 찾기
MIN()
최솟값 찾기
(집계 함수 + OVER)
이동 평균, 이동 합계 등 계산

3) 행 순서 관련 함수(오프셋 함수)

함수
설명
LAG(n)
현재 행에서 n만큼 이전 행 값 반환
LEAD(n)
현재 행에서 n만큼 이후 행 값 반환
FIRST_VALUE
윈도우의 첫 번째 행 값 반환
LAST_VALUE
윈도우의 마지막 행 값 반환
NTH_VALUE(n)
윈도우의 n번째 행 값 반환

4) 비율 함수

함수
설명
CUME_DIST()
누적 분포 값 계산
PERCENT_RANK()
백분율 순위 계산
NTILE(n)
데이터를 n개 그룹으로 균등 분할
RATIO_TO_REPORT
그룹 내 비율 계산

5) 분석 함수 ❌

⚠️ 통계 및 분석 관련 함수는 SQLD 범위 아님

3️⃣ 윈도우 함수의 형식

1) 윈도우 함수의 형식

  • OVER 키워드가 필수로 포함
  • ROWS : 물리적인 결과 행의 수 / RANGE : 논리적인 값에 의한 범위
    • → 둘 중 하나 선택해서 사용
      단, WINDOWING 절은 SQL Server에서는 미지원
SELECT WINDOW_FUNCTION(ARGUMENTS) OVER ([PARTITION BY 칼럼] [ORDER 절] [WINDOWING 절]) FROM 테이블명;
  • WINDOW_FUNCTION : 기존에 사용하던 함수도 있고, 새롭게 WINDOW 함수용으로 추가된 함수도 있음
  • ARGUMENTS(인수) : 함수에 따라 0 ~ N개의 인수가 지정될 수 있음
  • PARTITION BY 절 : 전체 집합을 기준에 따라 소그룹으로 나눌 수 있음
  • ORDER BY 절 : 어떤 항목에 대해 순위를 지정하고자 할 때 ORDER BY 절을 기술
  • WINDOWING 절 : 함수의 대상이 되는 행 기준의 범위(계산이 되는 범위)를 세밀하게 지정할 수 있음

2) 윈도우 함수의 예

SELECT E.EMPNO, E.ENAME, E.DEPTNO, D.DNAME, E.SAL, ROW_NUMBER() OVER( PARTITION BY E.DEPTNO ORDER BY E.SAL DESC ) AS SALARY_RANK FROM EMP E JOIN DEPT D ON E.DEPTNO = D.DEPTNO;
EMPNO
ENAME
DEPTNO
DNAME
SAL
SALARY_RANK
7839
KING
10
ACCOUNTING
5000
1
7782
CLARK
10
ACCOUNTING
2450
2
7934
MILLER
10
ACCOUNTING
1300
3
7902
FORD
20
RESEARCH
3000
1
7788
SCOTT
20
RESEARCH
3000
2
7566
JONES
20
RESEARCH
2975
3
7876
ADAMS
20
RESEARCH
1100
4
7369
SMITH
20
RESEARCH
800
5
7698
BLAKE
30
SALES
2850
1
7499
ALLEN
30
SALES
1600
2
7844
TURNER
30
SALES
1500
3
7521
WARD
30
SALES
1250
4
7654
MARTIN
30
SALES
1250
5
7900
JAMES
30
SALES
950
6

2. 순위 함수

1️⃣ ROW_NUMBER()

1) ROW_NUMBER()

  • SQL에서 각 행에 고유한 순위 번호를 할당하는 윈도우 함수
  • 주로 데이터의 순서를 매기거나 특정 기준에 따라 행을 나열할 때 사용됨

2) ROW_NUMBER() 함수의 형식

ROW_NUMBER() OVER (PARTITION BY [파티션 기준] ORDER BY [정렬 기준])
  • ROW_NUMBER() 뒤에 OVER 절이 오며, 두 가지 옵션을 괄호로 묶어 사용
  • PARTITION BY [파티션 기준]
    • 행을 기준으로 구분해 나누는 옵션
    • 생략 가능하며, 생략할 경우 전체 결과 집합에 대해 순위 매김
  • ORDER BY [정렬 기준]
    • 순위를 매길 때 사용할 정렬 기준
    • 반드시 지정해야 함
    • 지정하지 않으면 에러 발생

3) ROW_NUMBER() 함수의 예 #1

  • 전체 행에 대해 급여(SAL)가 높은 순으로 순위 매기는 함수(PARTITION BY 옵션 지정 안 함)
    • SELECT DEPTNO, ENAME, SAL, ROW_NUMBER() OVER( ORDER BY SAL DESC ) AS RANK FROM EMP;
      DEPTNO
      ENAME
      SAL
      RANK
      10
      KING
      5000
      1
      20
      FORD
      3000
      2
      20
      SCOTT
      3000
      3
      20
      JONES
      2975
      4
      30
      BLAKE
      2850
      5
    • 급여 값은 같은데 순위 다름 (ROW_NUMBER() 함수는 동일 순위 표시 불가 ❌)
※ 타이 브레이커(tie-breaker)
  • ROW_NUMBER() 함수는 같은 값을 가진 행들 사이의 순서를 데이터베이스 시스템에 의해 임의 결정됨
    • → 동일한 ORDER BY 정렬 순서에 대해 동일한 결과의 순위 보장 못 함
      → 일관된 결과 얻기 위해 ORDER BY 절에 추가로 칼럼 지정해야 함
      → 이 때, 추가되는 칼럼을 ‘타이 브레이커(tie-breaker)’라 부름
  • 형식
    • ROW_NUMBER() OVER (PARTITION BY [파티션 기준] ORDER BY [정렬 기준#1], [정렬 기준#2], ...)
  • 예시
    • SELECT DEPTNO, ENAME, SAL, ROW_NUMBER() OVER ( ORDER BY SAL DESC, ENAME DESC ) AS RANK FROM EMP;
      DEPTNO
      ENAME
      SAL
      RANK
      10
      KING
      5000
      1
      20
      SCOTT
      3000
      2
      20
      FORD
      3000
      3
      20
      JONES
      2975
      4
      30
      BLAKE
      2850
      5

4) ROW_NUMBER() 함수의 예 #2

  • 부서별로 구분하고, 부서별로 급여(SAL)가 높은 순으로 순위를 매기는 함수
    • (PARTITION BY 옵션 지정)
      SELECT DEPTNO, ENAME, SAL, ROW_NUMBER() OVER ( PARTITION BY DEPTNO ORDER BY SAL DESC ) AS RANK FROM EMP;
      DEPTNO
      ENAME
      SAL
      RANK
      10
      KING
      5000
      1
      10
      CLARK
      2450
      2
      10
      MILLER
      1300
      3
      20
      SCOTT
      3000
      1
      20
      FORD
      3000
      2
      20
      JONES
      2975
      3
      20
      ADAMS
      1100
      4
      20
      SMITH
      800
      5
      30
      BLAKE
      2850
      1
      30
      ALLEN
      1600
      2
      30
      TURNER
      1500
      3
      30
      MARTIN
      1250
      4
      30
      WARD
      1250
      5
      30
      JAMES
      950
      6

5) ROW_NUMBER() 함수의 예 #3

  • 특정 부서에 대해서만 급여(SAL) 값이 높은 순으로 순위를 매기는 함수
    • (WHERE 절에서 특정 부서의 조건을 정의)
      SELECT DEPTNO, ENAME, SAL, ROW_NUMBER() OVER ( ORDER BY SAL DESC ) AS RANK FROM EMP WHERE DEPTNO = 30;
      DEPTNO
      ENAME
      SAL
      RANK
      30
      BLAKE
      2850
      1
      30
      ALLEN
      1600
      2
      30
      TURNER
      1500
      3
      30
      WARD
      1250
      4
      30
      MARTIN
      1250
      5
      30
      JAMES
      950
      6

2️⃣ RANK()

1) RANK() 함수

  • 동일한 값이 있을 때 동일한 순위 부여하고, 다음 순위 건너뜀

2) RANK() 함수의 형식

RANK() OVER (PARTITION BY [파티션 기준] ORDER BY [정렬 기준])

3) RANK() 함수의 예시

SELECT DEPTNO, ENAME, SAL, RANK() OVER ( ORDER BY SAL DESC ) AS RANK FROM EMP;
DEPTNO
ENAME
SAL
RANK
10
KING
5000
1
20
FORD
3000
2
20
SCOTT
3000
2
20
JONES
2975
4
30
BLAKE
2850
5

3️⃣ DENSE_RANK()

1) DENSE_RANK() 함수

  • 동일한 값이 있을 때 동일한 순위 부여하고, 다음 순위 건너뛰지 않고 연속된 순위를 매김

2) DENSE_RANK() 함수의 형식

DENSE_RANK() OVER (PARTITION BY [파티션 기준] ORDER BY [정렬 기준])

3) DENSE_RANK() 함수의 예시

SELECT DEPTNO, ENAME, SAL, DENSE_RANK() OVER ( ORDER BY SAL DESC ) AS RANK FROM EMP;
DEPTNO
ENAME
SAL
RANK
10
KING
5000
1
20
SCOTT
3000
2
20
FORD
3000
2
20
JONES
2975
3
30
BLAKE
2850
4
10
CLARK
2450
5
30
ALLEN
1600
6
30
TURNER
1500
7
10
MILLER
1300
8
30
WARD
1250
9
30
MARTIN
1250
9
20
ADAMS
1100
10
30
JAMES
950
11
20
SMITH
800
12

3. 집계 함수

1️⃣ SUM()

1) SUM() 함수

  • 지정된 칼럼의 숫자 값들의 합계 계산
  • NULL 값은 무시됨
    • NULL을 0으로 처리하고 싶다면 COALESCE 혹은 NVL 함수 사용해야 함
    • SUM(COALESCE(COLUMN_NAME, 0)) SUM(NVL(COLUMN_NAME,0))

2) SUM() 함수의 예

SELECT DEPTNO, SUM(SAL) AS DEPT_SAL_SUM FROM EMP GROUP BY DEPTNO;
DEPTNO
DEPT_SAL_SUM
20
10875
30
9400
10
8750
SELECT DEPTNO, SUM(COALESCE(SAL,0)) AS DEPT_SAL_SUM FROM EMP GROUP BY DEPTNO;
SELECT DEPTNO, SUM(NVL(SAL,0)) AS DEPT_SAL_SUM FROM EMP GROUP BY DEPTNO;

COALESCE vs NVL

COALESCE
NVL
호환성
SQL 표준
오라클 전용
매개변수의 수
두 개 이상의 매개변수 사용 가능
두 개의 매개변수만 사용 가능
평가 방식
NULL이 아닌 값 찾으면 그 이후의 매개변수는 평가하지 않음
두 번째 매개변수 항상 평가
성능
더 효율적 (특히, 여러 대체 값이 있을 때)

2️⃣ AVG()

1) AVG() 함수

  • SQL에서 특정 칼럼의 평균 값 계산할 때 사용
  • NULL 값 무시
    • NULL 값을 0으로 취급하여 평균 값 계산하고 싶다면 COALESCE 또는 NVL 함수 사용

2) AVG() 함수의 예

SELECT DEPTNO, AVG(COALESCE(COMM, 0)) AS COMM_AVG FROM EMP GROUP BY DEPTNO;
DEPTNO
COMM_AVG
20
0
30
366.6667
10
0

3️⃣ COUNT()

1) COUNT() 함수

  • 행의 개수 계산하는 집계 함수
  • NULL 값은 무시할 수 있지만, 모든 행을 포함할 수도 있음

2) COUNT() 함수의 예

  • COUNT(*)는 NULL을 포함
    • SELECT COUNT(*) AS TOTAL_SAL FROM EMP;
      TOTAL_SAL
      14
  • 특정 칼럼의 COUNT()는 기본적으로 NULL을 제외
    • SELECT COUNT(COMM) AS TOTAL_SAL FROM EMP;
      TOTAL_SAL
      4
  • 특정 칼럼의 NULL을 포함해서 COUNT하고 싶을 때
    • SELECT COUNT(COALESCE(COMM, 0)) AS TOTAL_SAL FROM EMP;
      TOTAL_SAL
      14

4️⃣ MAX()

1) MAX() 함수

  • 지정된 칼럼의 최댓값 반환
  • NULL 값 무시
  • 주로 수치 데이터, 날짜, 문자열 등 비교 가능한 값에 대해 적용

2) MAX() 함수의 예

SELECT DEPTNO, MAX(SAL) AS MAX_SAL FROM EMP GROUP BY DEPTNO ORDER BY DEPTNO;
DEPTNO
MAX_SAL
10
5000
20
3000
30
2850

5️⃣ MIN()

1) MIN() 함수

  • 지정된 칼럼의 최솟값 반환
  • NULL 값 무시
  • 주로 수치 데이터, 날짜, 문자열 등 비교 가능한 값에 대해 적용

2) MIN() 함수의 예

SELECT DEPTNO, MIN(SAL) AS MIN_SAL FROM EMP GROUP BY DEPTNO ORDER BY DEPTNO;
DEPTNO
MIN_SAL
10
1300
20
800
30
950

6️⃣ 집계 함수 + OVER

1) 집계 함수 + OVER

  • 집계 함수가 윈도우 함수로 작동하여 데이터의 특정 ‘윈도우’ 또는 ‘프레임’ 내에서 계산 수행
  • OVER 절 : 집계 함수의 적용 범위 정의

2) 집계 함수 + OVER

SELECT EMPNO, DEPTNO, ENAME, SAL, AVG(SAL) OVER ( PARTITION BY DEPTNO ORDER BY DEPTNO ) AS DEPT_SAL_AVG FROM EMP;
EMPNO
DEPTNO
DNAME
SAL
DEPT_SAL_AVG
7782
10
CLARK
2450
2916.667
7839
10
KING
5000
2916.667
7934
10
MILLER
1300
2916.667
7566
20
JONES
2975
2175
7902
20
FORD
3000
2175

4. 행 순서 관련 함수(오프셋 함수)

1️⃣ LAG(n)

1) LAG(n) 함수

  • 주어진 행의 이전 행 값을 반환하는 윈도우 함수
  • 데이터 분석과 시계열 데이터 처리에 매우 유용함

2) LAG(n) 함수의 형식

  • OVER 절과 함께 사용되어 데이터를 파티션으로 나누고 정렬할 수 있음
LAG(칼럼명, [위치 n], [이전 행이 없을 때 반환할 값]) OVER (PARTITION BY [파티션 기준] ORDER BY [정렬 기준])

3) LAG(n) 함수의 예

SELECT DEPTNO, EMPNO, ENAME, SAL, LAG(SAL, 1, 0) OVER ( ORDER BY EMPNO ) AS PRE_SAL FROM EMP;
DEPTNO
EMPNO
ENAME
SAL
PRE_SAL
20
7369
SMITH
800
0
30
7499
ALLEN
1600
800
30
7521
WARD
1250
1600
20
7566
JONES
2975
1250
30
7654
MARTIN
1250
2975
30
7698
BLAKE
2850
1250
10
7782
CLARK
2450
2850
20
7788
SCOTT
3000
2450
10
7839
KING
5000
3000
30
7844
TURNER
1500
5000
20
7876
ADAMS
1100
1500
30
7900
JAMES
950
1100
20
7902
FORD
3000
950
10
7934
MILLER
1300
3000

2️⃣ LEAD(n)

1) LEAD(n) 함수

  • 주어진 행의 이후 행 값을 반환하는 윈도우 함수
  • 데이터 분석과 시계열 데이터 처리에 매우 유용함

2) LEAD(n) 함수의 형식

  • OVER 절과 함께 사용되어 데이터를 파티션으로 나누고 정렬할 수 있음
LEAD(칼럼명, [위치 n], [이후 행이 없을 때 반환할 값]) OVER (PARTITION BY [파티션 기준] ORDER BY [정렬 기준])

3) LEAD(n) 함수의 예

SELECT DEPTNO, EMPNO, ENAME, SAL, LEAD(SAL, 1, 0) OVER ( ORDER BY EMPNO ) AS NEXT_SAL FROM EMP;
DEPTNO
EMPNO
ENAME
SAL
PRE_SAL
20
7369
SMITH
800
1600
30
7499
ALLEN
1600
1250
30
7521
WARD
1250
2975
20
7566
JONES
2975
1250
30
7654
MARTIN
1250
2850
30
7698
BLAKE
2850
2450
10
7782
CLARK
2450
3000
20
7788
SCOTT
3000
5000
10
7839
KING
5000
1500
30
7844
TURNER
1500
1100
20
7876
ADAMS
1100
950
30
7900
JAMES
950
3000
20
7902
FORD
3000
1300
10
7934
MILLER
1300
0

3️⃣ FIRST_VALUE()

1) FIRST_VALUE() 함수

  • 데이터 집합 도는 파티션 내에서 첫 번째 값 반환

2) FIRST_VALUE() 함수의 형식

FIRST_VALUE(칼럼명) OVER ( PARTITION BY [파티션 기준] ORDER BY [정렬 기준] [WINDOW FRAME] // 데이터 범위 지정 (생략 가능) )

3) FIRST_VALUE() 함수의 예

SELECT DEPTNO, EMPNO, ENAME, SAL, FIRST_VALUE(SAL) OVER ( PARTITION BY DEPTNO ORDER BY EMPNO ) AS DEPT_FIRST_SAL FROM EMP;
DEPTNO
EMPNO
ENAME
SAL
DEPT_FIRST_SAL
10
7782
CLARK
2450
2450
10
7839
KING
5000
2450
10
7934
MILLER
1300
2450
20
7369
SMITH
800
800
20
7566
JONES
2975
800
20
7788
SCOTT
3000
800

4️⃣ LAST_VALUE()

1) LAST_VALUE() 함수

  • 데이터 집합 도는 파티션 내에서 마지막 값 반환

2) LAST_VALUE() 함수의 형식

LAST_VALUE(칼럼명) OVER ( PARTITION BY [파티션 기준] ORDER BY [정렬 기준] [WINDOW FRAME] // 데이터 범위 지정 (생략 가능) )

3) LAST_VALUE() 함수의 예

SELECT DEPTNO, EMPNO, ENAME, SAL, LAST_VALUE(SAL) OVER ( PARTITION BY DEPTNO ORDER BY EMPNO ) AS DEPT_LAST_SAL FROM EMP;
DEPTNO
EMPNO
ENAME
SAL
DEPT_LAST_SAL
10
7782
CLARK
2450
2450
10
7839
KING
5000
5000
10
7934
MILLER
1300
1300
20
7369
SMITH
800
800
20
7566
JONES
2975
2975
20
7788
SCOTT
3000
3000
  • LAST_VALUE()는 기본적으로 현재 행까지만의 데이터를 고려함
  • 아직 처리하지 않은 나머지 값 고려하기 위해서 범위를 명시해야 함 (➡️ 윈도우 함수의 프레임 절)
    • ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
      ⬇️ 의미
      ROWS // 모든 ROW에 대해 BETWEEN UNBOUNDED PRECEDING // 파티션의 첫 번째 행부터 AND UNBOUNDED FOLLOWING // 파티션의 마지막 행까지
  • 프레임 절 적용
SELECT DEPTNO, EMPNO, ENAME, SAL, LAST_VALUE(SAL) OVER ( PARTITION BY DEPTNO ORDER BY EMPNO ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) AS DEPT_LAST_SAL FROM EMP;
DEPTNO
EMPNO
ENAME
SAL
DEPT_LAST_SAL
10
7782
CLARK
2450
1300
10
7839
KING
5000
1300
10
7934
MILLER
1300
1300
20
7369
SMITH
800
3000
20
7566
JONES
2975
3000
20
7788
SCOTT
3000
3000
20
7876
ADAMS
1100
3000
20
7902
FORD
3000
3000
30
7499
ALLEN
1600
950

5️⃣ NTH_VALUE(n)

1) NTH_VALUE(n) 함수

  • 데이터 집합 또는 파티션 내에서 지정된 순서의 값 반환

2) NTH_VALUE(n) 함수의 형식

  • OVER절과 함께 사용되어 데이터를 파티션으로 나누고 정렬할 수 있음
NTH_VALUE(칼럼명, n) OVER ( PARTITION BY [파티션 기준] ORDER BY [정렬 기준] [WINDOW FRAME] // 데이터 범위 지정 (생략 가능) )

3) NTH_VALUE(n) 함수의 예

SELECT DEPTNO, EMPNO, ENAME, SAL, NTH_VALUE(SAL, 2) OVER ( PARTITION BY DEPTNO ORDER BY EMPNO ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) AS SECOND_SAL FROM EMP;
DEPTNO
EMPNO
ENAME
SAL
DEPT_LAST_SAL
10
7782
CLARK
2450
5000
10
7839
KING
5000
5000
10
7934
MILLER
1300
5000
20
7369
SMITH
800
2975
20
7566
JONES
2975
2975
20
7788
SCOTT
3000
2975

5. 비율 함수

1️⃣ COME_DIST()

1) CUME_DIST() 함수

  • 누적 분포 함수
  • 데이터 집합 내에서 특정 값 이하의 값들이 차지하는 비율 반환
  • 0과 1 사이의 값 반환

2) CUME_DIST() 함수의 형식

CUME_DIST() OVER ( PARTITION BY [파티션 기준] ORDER BY [정렬 기준] )

3) CUME_DIST() 함수의 예

SELECT DEPTNO, EMPNO, ENAME, SAL, CUME_DIST() OVER ( PARTITION BY DEPTNO ORDER BY SAL ) AS DEPT_CUME_DUST FROM EMP;
DEPTNO
EMPNO
ENAME
SAL
DEPT_CUME_DUST
10
7934
MILLER
1300
0.333333
10
7782
CLARK
2450
0.666667
10
7839
KING
5000
1
20
7369
SMITH
800
0.2
20
7876
ADAMS
1100
0.4
20
7566
JONES
2975
0.6
20
7788
SCOTT
3000
1
20
7902
FORD
3000
1
30
7900
JAMES
950
0.166667
30
7521
WARD
1250
0.5
30
7654
MARTIN
1250
0.5
30
7844
TURNER
1500
0.666667
30
7499
ALLEN
1600
0.833333
30
7698
BLAKE
2850
1

2️⃣ PERCENT_RANK()

1) PERCENT_RANK() 함수

  • 데이터 집합 내에서 각 값의 백분위 순위를 계산하여, 첫 번째 행의 백분위 순위는 0으로 시작해서 0과 1 사이의 값 반환
  • 각 항목의 상대적 위치를 백분율로 쉽게 표현 가능
  • PERCENT_RANK() = 순위 - 1 / 전체 행의 개수 - 1
  • CUME_DIST()와의 차이점
    • PERCENT_RANK() : 순위 기반 / 0부터 시작
    • CUME_DIST() : 누적 분포 기반 / 0보다 큰 값부터 시작

2) PERCENT_RANK() 함수의 형식

PERCENT_RANK() OVER ( PARTITION BY [파티션 기준] ORDER BY [정렬 기준] )

3) PERCENT_RANK() 함수의 예

SELECT DEPTNO, EMPNO, ENAME, SAL, PERCENT_RANK() OVER ( PARTITION BY DEPTNO ORDER BY SAL ) AS DEPT_PERCENT_RANK FROM EMP;
DEPTNO
EMPNO
ENAME
SAL
DEPT_PERCENT_RANK
10
7934
MILLER
1300
0
10
7782
CLARK
2450
0.5
10
7839
KING
5000
1
20
7369
SMITH
800
0
20
7876
ADAMS
1100
0.25
20
7566
JONES
2975
0.5
20
7788
SCOTT
3000
0.75
20
7902
FORD
3000
0.75
30
7900
JAMES
950
0

3️⃣ NTILE(n)

1) NTILE(n) 함수

  • 데이터 집합을 n개의 동일한 크기의 그룹으로 나누고, 각 행에 그룹 번호를 부여함

2) NTILE(n) 함수의 형식

NTILE(n) OVER ( PARTITION BY [파티션 기준] ORDER BY [정렬 기준] )

3) NTILE(n) 함수의 예

SELECT DEPTNO, EMPNO, ENAME, SAL, NTILE(3) OVER ( PARTITION BY DEPTNO ORDER BY SAL ) AS DEPT_NTILE FROM EMP;
DEPTNO
EMPNO
ENAME
SAL
DEPT_NTILE
10
7934
MILLER
1300
1
10
7782
CLARK
2450
2
10
7839
KING
5000
3
20
7369
SMITH
800
1
20
7876
ADAMS
1100
1
20
7566
JONES
2975
2
20
7788
SCOTT
3000
2
20
7902
FORD
3000
3
30
7900
JAMES
950
1
 
Share article