PERCENTILE_CONT(Transact-SQL)
적용 대상: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW) Microsoft Fabric의 SQL 분석 엔드포인트 Microsoft Fabric의 웨어하우스
SQL Server 데이터베이스 엔진 열 값의 연속 분포를 기반으로 백분위수 계산 결과는 보간되며 열의 특정 값과 같지 않을 수 있습니다.
구문
PERCENTILE_CONT ( numeric_literal )
WITHIN GROUP ( ORDER BY order_by_expression [ ASC | DESC ] )
OVER ( [ <partition_by_clause> ] )
인수
numeric_literal
계산할 백분위수입니다. 값의 범위는 다음 사이 0.0
여야 1.0
합니다.
WITHIN GROUP(order by order_by_expression )
정렬할 숫자 값 목록을 지정하고 백분위수를 컴퓨팅합니다. order_by_expression은 하나만 허용됩니다. 식은 정확하거나 근사치 숫자 형식으로 계산되어야 하며, 다른 데이터 유형은 허용되지 않습니다. 정확한 숫자 형식은 int, bigint, smallint, tinyint, numeric, bit, decimal, smallmoney 및 money입니다. 근사치 숫자 형식은 float 및 real입니다. 기본 정렬 순서는 오름차순입니다.
OVER( <partition_by_clause> )
절에서 생성된 결과 집합을 FROM
백분위수 함수가 적용되는 파티션으로 나눕니다. 자세한 내용은 SELECT - OVER 절을 참조하세요. ORDER BY
함수에서 OVER
구문과 <rows or range clause>
절을 지정할 PERCENTILE_CONT
수 없습니다.
반환 형식
float(53)
호환성 지원
WITHIN GROUP
는 호환성 수준 110
부터 시작하는 예약 키워드입니다. 자세한 내용은 ALTER DATABASE 호환성 수준을 참조하세요.
설명
모든 null은 데이터 집합에서 무시됩니다.
PERCENTILE_CONT
는 비결정적입니다. 자세한 내용은 Deterministic and Nondeterministic Functions을 참조하세요.
예제
이 문서의 Transact-SQL 코드 샘플은 AdventureWorks2022
또는 AdventureWorksDW2022
샘플 데이터베이스를 사용하며, 이는 Microsoft SQL Server 예시 및 커뮤니티 프로젝트(Microsoft SQL Server Samples and Community Projects) 홈 페이지에서 다운로드할 수 있습니다.
A. 부서당 평균 직원 급여 찾기
다음 예제에서는 각 부서에서 직원 급여의 중간값을 사용하고 PERCENTILE_CONT
PERCENTILE_DISC
찾습니다. 이러한 함수는 동일한 값을 반환하지 않을 수 있습니다. PERCENTILE_CONT
데이터 집합에 존재할 수도 있고 없을 수도 있는 적절한 값을 보간하고 PERCENTILE_DISC
항상 집합의 실제 값을 반환합니다.
USE AdventureWorks2022;
GO
SELECT DISTINCT Name AS DepartmentName,
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY ph.Rate)
OVER (PARTITION BY Name) AS MedianCont,
PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY ph.Rate)
OVER (PARTITION BY Name) AS MedianDisc
FROM HumanResources.Department AS d
INNER JOIN HumanResources.EmployeeDepartmentHistory AS dh
ON dh.DepartmentID = d.DepartmentID
INNER JOIN HumanResources.EmployeePayHistory AS ph
ON ph.BusinessEntityID = dh.BusinessEntityID
WHERE dh.EndDate IS NULL;
다음은 결과 집합의 일부입니다.
DepartmentName MedianCont MedianDisc
-------------------- ---------- ----------
Document Control 16.8269 16.8269
Engineering 34.375 32.6923
Executive 54.32695 48.5577
Human Resources 17.427850 16.5865
예: Azure Synapse Analytics 및 분석 플랫폼 시스템(PDW)
다음 예제에서는 샘플 데이터베이스를 AdventureWorksDW2012
사용합니다.
B. 부서당 평균 직원 급여 찾기
다음 예제에서는 각 부서에서 직원 급여의 중간값을 사용하고 PERCENTILE_CONT
PERCENTILE_DISC
찾습니다. 이러한 함수는 동일한 값을 반환하지 않을 수 있습니다. PERCENTILE_CONT
데이터 집합에 존재할 수도 있고 없을 수도 있는 적절한 값을 보간하고 PERCENTILE_DISC
항상 집합의 실제 값을 반환합니다.
SELECT DISTINCT DepartmentName,
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY BaseRate)
OVER (PARTITION BY DepartmentName) AS MedianCont,
PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY BaseRate)
OVER (PARTITION BY DepartmentName) AS MedianDisc
FROM dbo.DimEmployee;
다음은 결과 집합의 일부입니다.
DepartmentName MedianCont MedianDisc
-------------------- ---------- ----------
Document Control 16.826900 16.8269
Engineering 34.375000 32.6923
Human Resources 17.427850 16.5865
Shipping and Receiving 9.250000 9.0000