APPROX_PERCENTILE_CONT(Transact-SQL)

적용 대상: Microsoft Fabric의 Microsoft FabricWarehouse에 있는 SQL Server 2022(16.x) Azure SQL DatabaseAzure SQL Managed InstanceSQL 분석 엔드포인트

이 함수는 백분위수 값 및 정렬 사양을 기반으로 그룹의 값 집합에서 대략적인 보간된 값을 반환합니다. 대략적인 함수이므로 출력은 특정 신뢰도로 바인딩된 순위 기반 오류 내에 있습니다. 이 함수에서 반환하는 백분위수 값은 열 값의 연속 분포를 기반으로 하며 결과는 보간됩니다. 이로 인해 출력은 데이터 세트 값 중 하나가 아닐 수 있습니다. 이 함수의 일반적인 사용 사례 중 하나는 데이터 이상값을 방지하는 것입니다. 이 함수는 응답 시간이 느린 정확한 백분위수 값에 비해 빠른 응답으로 무시할 수 있는 오류가 허용되는 대규모 데이터 세트의 경우 PERCENTILE_CONT의 대안으로 사용할 수 있습니다.

Transact-SQL 구문 표기 규칙

구문

APPROX_PERCENTILE_CONT (numeric_literal)
WITHIN GROUP (ORDER BY order_by_expression [ASC|DESC]) 

인수

numeric_literal

계산할 백분위수입니다. 값은 0.0에서 1.0 사이여야 합니다.

order_by_expression

정렬할 숫자 값 목록을 지정하고 백분위수를 컴퓨팅합니다. order_by_expression은 하나만 허용됩니다. 기본 정렬 순서는 ASC(오름차순)입니다.  식은 정확하거나 근사치 숫자 형식으로 계산되어야 하며, 다른 데이터 유형은 허용되지 않습니다. 정확한 숫자 형식은 int, bigint, smallint, tinyint, numeric, bit, decimal, smallmoney 및 money입니다. 근사치 숫자 형식은 float 및 real입니다.

반환 형식

float(53)

설명

모든 null은 데이터 집합에서 무시됩니다.

대략적인 백분위수 함수는 KLL 스케치를 사용합니다. 스케치는 데이터 스트림을 읽어 빌드됩니다. 사용되는 알고리즘으로 인해 이 함수는 근사치에 해당하지 않는 메모리(PERCENTILE_CONT)보다 적은 메모리를 필요로 합니다.

이 함수는 순위 기반 오류가 값 기반이 아님을 보장합니다. 함수 구현은 최대 1.33% 오류를 보장합니다.

알려진 동작

  • 함수의 출력은 모든 실행에서 동일하지 않을 수 있습니다. 이러한 함수에 사용되는 알고리즘은 임의 알고리즘인 KLL 스케치입니다. 스케치가 작성될 때마다 임의의 값이 선택됩니다. 이러한 함수는 값 기반이 아닌 순위 기반 오류 보장을 제공합니다.
  • 함수 구현은 99% 신뢰도 내에서 최대 1.33% 오류 범위를 보장합니다.

호환성 지원

호환성 수준 110 이상에서 WITHIN GROUP은 예약 키워드입니다. 자세한 내용은 ALTER DATABASE 호환성 수준(Transact-SQL)을 참조하세요.

다음 예제에서는 테이블을 만들고, 채우고, 샘플 쿼리를 실행합니다.

SET NOCOUNT ON
GO
DROP TABLE IF EXISTS tblEmployee;
GO
CREATE TABLE tblEmployee (
EmplId INT IDENTITY(1,1) PRIMARY KEY CLUSTERED,
DeptId INT,
Salary int);
GO
INSERT INTO tblEmployee
VALUES (1, 31),(1, 33), (1, 18), (2, 25),(2, 35),(2, 10), (2, 10),(3,
1), (3,NULL), (4,NULL), (4,NULL);
GO
SELECT DeptId,
APPROX_PERCENTILE_CONT(0.10) WITHIN GROUP(ORDER BY Salary) AS 'P10',
APPROX_PERCENTILE_CONT(0.90) WITHIN GROUP(ORDER BY Salary) AS 'P90'
FROM tblEmployee
GROUP BY DeptId;