APPROX_PERCENTILE

APPROX_PERCENTILE

APPROX_PERCENTILE() 함수는 원하는 백분위수에 대한 근사 값을 반환해요 (즉, 열 c에 n개의 숫자가 있으면 APPROX_PERCENTILE(c, p)는 c의 숫자 중 대략 n * p 개가 반환된 숫자보다 작도록 하는 숫자를 반환해요).

이 함수는 개선된 버전의 t-Digest 알고리즘을 사용해요. 자세한 내용은 백분위수 값 추정하기 문서를 참고하세요.

출처: Snowflake SQL Reference

본문

문법

집계 함수 (Aggregate function):

APPROX_PERCENTILE( <expr> , <percentile> )

윈도우 함수 (Window function):

APPROX_PERCENTILE( <expr> , <percentile> ) OVER ( [ PARTITION BY <expr3> ] )

인자

expr — 열 이름 같은, 숫자 값으로 평가되는 유효한 표현식이에요.

percentile — 0.0 이상 1.0 미만의 상수 실수 값이에요. 백분위수(0부터 99.999…)를 나타내요. 예를 들어 0.65는 65번째 백분위수를 나타내요.

expr3 — 행을 파티션으로 그룹화하는 데 사용되는 선택적 표현식이에요.

반환

출력은 DOUBLE 값으로 반환돼요.

사용 노트

  • 백분위수는 숫자 값에서만 동작하므로, expr은 숫자이거나 숫자로 캐스팅될 수 있는 값을 만들어야 해요.
  • 반환되는 값이 데이터 집합에 반드시 존재하는 것은 아니에요.
  • 반환되는 값은 근삿값이에요. 데이터 집합의 크기와 데이터 집합의 왜곡(skew)이 근사 정확도에 영향을 줘요.
  • 이 함수를 윈도우 함수로 호출할 때는 다음을 지원하지 않아요.
    • OVER 절 안의 ORDER BY 절.
    • 명시적 윈도우 프레임.
  • 소수 부동소수점(DECFLOAT) 값은 지원하지 않아요.

예제

APPROX_PERCENTILE 함수를 확인해 봐요.

값을 담은 테이블을 만들고 채워요:

CREATE TABLE testtable (c1 INTEGER);

INSERT INTO testtable (c1) VALUES
  (0), (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);

쿼리를 실행하고 출력을 확인해요:

SELECT APPROX_PERCENTILE(c1, 0.1)
  FROM testtable;
+----------------------------+
| APPROX_PERCENTILE(C1, 0.1) |
|----------------------------|
|                        1.5 |
+----------------------------+
SELECT APPROX_PERCENTILE(c1, 0.5)
  FROM testtable;
+----------------------------+
| APPROX_PERCENTILE(C1, 0.5) |
|----------------------------|
|                        5.5 |
+----------------------------+

이 경우 반환된 값이 실제 데이터 집합의 어떤 값보다 높다는 점에 주의하세요:

SELECT APPROX_PERCENTILE(c1, 0.999)
  FROM testtable;
+------------------------------+
| APPROX_PERCENTILE(C1, 0.999) |
|------------------------------|
|                         10.5 |
+------------------------------+

더 알아보기 (Learn more)