PERCENTILE_CONT 함수 - AWS Clean Rooms

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

PERCENTILE_CONT 함수

PERCENTILE_CONT는 연속 분포 모델을 가정하는 역분포 함수입니다. 백분위 값과 정렬 명세를 가지며, 정렬 명세와 관련하여 지정된 백분위 값에 해당하는 보간 값을 반환합니다.

PERCENTILE_CONT는 순서가 지정된 값 사이의 선형 보간을 계산합니다. 이 함수는 집계 그룹에서 백분위 값(P)과 NULL을 제외한 행들의 번호(N)를 사용하여 정렬 명세에 따라 행의 순서를 지정한 후 행 번호를 계산합니다. 행 번호(RN)를 계산하는 공식은 RN = (1+ (P*(N-1))입니다. 이 집계 함수의 최종 결과는 행 번호가 CRN = CEILING(RN)FRN = FLOOR(RN)인 행의 값 사이 선형 보간을 통해 계산됩니다.

최종 결과는 다음과 같습니다.

(CRN = FRN = RN)일 때 결과는 (value of expression from row at RN)입니다.

그렇지 않다면 다음 결과가 표시됩니다.

(CRN - RN) * (value of expression for row at FRN) + (RN - FRN) * (value of expression for row at CRN).

PERCENTILE_CONT는 컴퓨팅 노드 전용 함수입니다. 쿼리가 사용자 정의 테이블 또는 AWS Clean Rooms 시스템 테이블을 참조하지 않는 경우 함수는 오류를 반환합니다.

명령문

PERCENTILE_CONT ( percentile ) WITHIN GROUP (ORDER BY expr)

인수

Percentile

0과 1 사이의 숫자 상수입니다. 이 계산에서 Null 값은 무시됩니다.

WITHIN GROUP (ORDER BY expr)

숫자 또는 날짜/시간 값을 지정하여 백분위를 정렬 및 계산합니다.

반환 값

반환 형식은 WITHIN GROUP 절에서 ORDER BY 표현식의 데이터 형식에 따라 결정됩니다. 다음 표는 ORDER BY 표현식의 데이터 형식에 따른 반환 형식을 나타낸 것입니다.

입력 유형 반환 타입
SMALLINT, INTEGER, BIGINT, NUMERIC, DECIMAL DECIMAL
FLOAT, DOUBLE DOUBLE
날짜 날짜
TIMESTAMP TIMESTAMP
TIMESTAMPTZ TIMESTAMPTZ

사용 노트

ORDER BY 표현식이 최대 정밀도가 38자리로 정의된 DECIMAL 데이터 형식인 경우에는 PERCENTILE_CONT가 부정확한 결과 또는 오류를 반환합니다. PERCENTILE_CONT 함수의 반환 값이 38자리를 초과하면 정밀도가 손실될 수도 있기 때문에 알맞은 자리 수로 결과가 잘립니다. 보간 도중 중간 결과가 최대 정밀도를 초과하면 수치 오버플로우가 발생하고 함수는 오류를 반환합니다. 이러한 상황을 방지하려면 정밀도가 낮은 데이터 형식을 사용하거나, 혹은 ORDER BY 표현식을 낮은 정밀도로 변환합니다.

하나의 문에서 정렬 기반 집계 함수(LISTAGG, PERCENTILE_CONT, MEDIAN)를 여러 차례 호출하는 경우에는 모두 동일한 ORDER BY 값을 사용해야 합니다. 단, MEDIAN은 표현식 값에서 묵시적인 ORDER BY를 적용합니다.

예를 들어 다음과 같은 문은 오류를 반환합니다.

select top 10 salesid, sum(pricepaid), percentile_cont(0.6) within group (order by salesid), median (pricepaid) from sales group by salesid, pricepaid; An error occurred when executing the SQL command: select top 10 salesid, sum(pricepaid), percentile_cont(0.6) within group (order by salesid), median (pricepaid) from sales group by salesid, pricepai... ERROR: within group ORDER BY clauses for aggregate functions must be the same

다음 문은 성공적으로 실행됩니다.

select top 10 salesid, sum(pricepaid), percentile_cont(0.6) within group (order by salesid), median (salesid) from sales group by salesid, pricepaid;

다음은 MEDIAN이 PERCENTILE_CONT(0.5)와 동일한 결과를 산출하는 예입니다.

select top 10 distinct sellerid, qtysold, percentile_cont(0.5) within group (order by qtysold), median (qtysold) from sales group by sellerid, qtysold; sellerid | qtysold | percentile_cont | median ---------+---------+-----------------+------- 1 | 1 | 1.0 | 1.0 2 | 3 | 3.0 | 3.0 5 | 2 | 2.0 | 2.0 9 | 4 | 4.0 | 4.0 12 | 1 | 1.0 | 1.0 16 | 1 | 1.0 | 1.0 19 | 2 | 2.0 | 2.0 19 | 3 | 3.0 | 3.0 22 | 2 | 2.0 | 2.0 25 | 2 | 2.0 | 2.0