PERCENTILE_DISC
PERCENTILE_DISC (이산 백분위)
입력 열(order_by_expr에 지정)의 이산 분포(distribution)에 기반한 백분위 값을 반환해요. 반환되는 값은 주어진 백분위보다 크거나 같은 가장 작은 CUME_DIST 값을 가진 행의 값이에요. 계산에서 NULL 값은 무시돼요.
본문
참고: PERCENTILE_CONT
구문
집계 함수:
PERCENTILE_DISC( <percentile> ) WITHIN GROUP (ORDER BY <order_by_expr> )
윈도우 함수:
PERCENTILE_DISC( <percentile> )
WITHIN GROUP (ORDER BY <order_by_expr> )
OVER ( [ PARTITION BY <expr3> ] )
인자
percentile
찾고 싶은 값의 백분위예요. 백분위는 0.0과 1.0 사이의 상수여야 해요. 예를 들어 90번째 백분위 값을 찾고 싶다면 0.9를 지정하세요.
order_by_expr
값을 정렬할 기준인 표현식(보통 열 이름)이에요. 예를 들어 수학 SAT 점수가 90번째 백분위에 있는 학생을 찾고 싶다면 수학 SAT 점수를 담은 열을 지정하세요.
이 표현식은 반환 값을 선택하는 기준 열이기도 해요. 예를 들어 수학 SAT 점수로 정렬하면 결과는 수학 SAT 점수 중 하나예요. 한 열로 정렬하면서 다른 열에 대한 백분위 값을 얻을 수는 없어요.
expr3
이것은 행을 파티션으로 묶는 데 사용되는 선택적 표현식이에요.
반환 값
지정된 백분위에 있는 값을 반환해요.
사용 시 참고 사항
-
함수의
percentile인자는 상수여야 해요. -
이 함수에는 DISTINCT가 지원되지 않아요.
-
PERCENTILE_CONT 함수는 가장 가까운 두 값 사이에서 보간(interpolate)하지만, PERCENTILE_DISC 함수는 보간하지 않고 가장 가까운 값을 선택해요.
-
이 함수를 윈도우 함수로 호출할 때는 다음을 지원하지 않아요.
-
OVER 절 안의 ORDER BY 절.
-
명시적 윈도우 프레임(window frame).
-
예시
다음 예시는 여러 그룹 안에서 25번째 백분위(0.25)의 값을 보여줘요.
값이 있는 테이블을 만들고 채워요.
CREATE OR REPLACE TABLE aggr (k INT, v DECIMAL(10,2));
INSERT INTO aggr (k, v) VALUES
(0, 0),
(0, 10),
(0, 20),
(0, 30),
(0, 40),
(1, 10),
(1, 20),
(2, 10),
(2, 20),
(2, 25),
(2, 30),
(3, 60),
(4, NULL);
쿼리를 실행하고 출력을 보여줘요.
SELECT k, PERCENTILE_DISC(0.25) WITHIN GROUP (ORDER BY v)
FROM aggr
GROUP BY k
ORDER BY k;
+---+-------------------------------------------------+
| K | PERCENTILE_DISC(0.25) WITHIN GROUP (ORDER BY V) |
|---+-------------------------------------------------|
| 0 | 10.00 |
| 1 | 10.00 |
| 2 | 10.00 |
| 3 | 60.00 |
| 4 | NULL |
+---+-------------------------------------------------+