적용 대상:SQL 서버
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Microsoft Fabric
의 SQL 분석 엔드포인트Microsoft Fabric
의 웨어하우스Microsoft Fabric의 SQL 데이터베이스
이 함수는 PERCENTILE_DISC 전체 행셋 또는 행셋의 구별된 파티션 내에서 정렬된 값에 대해 특정 백분위수를 계산합니다. 지정된 백분위수 값 PPERCENTILE_DISC의 경우 절의 식 값을 정렬합니다ORDER BY. 그런 다음 CUME_DIST보다 크거나 같은 값이 지정된 가장 작은 값(동일한 정렬 사양과 관련하여)으로 값을 반환합니다. 예를 들어 식 PERCENTILE_DISC (0.5) 의 50번째 백분위수(즉, 중앙값)를 계산합니다.
PERCENTILE_DISC 는 열 값의 불연속 분포를 기반으로 백분위 수를 계산합니다. 결과는 열의 특정 값과 같습니다.
구문
집계 함수 구문:
PERCENTILE_DISC ( numeric_literal )
WITHIN GROUP ( ORDER BY order_by_expression [ ASC | DESC ]
[ OVER ( [ <partition_by_clause> ] ) ]
)
분석 함수 구문:
PERCENTILE_DISC ( numeric_literal ) WITHIN GROUP ( ORDER BY order_by_expression [ ASC | DESC ] )
OVER ( [ <partition_by_clause> ] )
인수
literal
계산할 백분위수입니다. 값은 0.0에서 1.0 사이여야 합니다.
WITHIN GROUP( order by order_by_expression [ ASC | DESC ] )
정렬할 값 목록을 지정하고 백분위수를 컴퓨팅합니다. order_by_expression은 하나만 허용됩니다. 기본 정렬 순서는 오름차순입니다. 값 목록은 정렬 조작에 유효한 모든 데이터 형식일 수 있습니다.
OVER( <partition_by_clause> )
절의 결과 집합을 FROM 파티션으로 나눕니다. Percentile 함수는 해당 파티션에 적용됩니다. 자세한 내용은 SELECT - OVER 절을 참조하세요.
<ORDER BY 절>과 <행 또는 범위 절>은 함수에 PERCENTILE_DISC 지정할 수 없습니다.
Note
이 조항은 OVER Fabric Data Warehouse과 SQL 분석 엔드포인트에서 선택 사항입니다.
PERCENTILE_DISC 집합 또는 분석(창) 형태로 사용할 수 있습니다.
반환 형식
반환 형식은 order_by_expression 형식에 의해 결정됩니다.
호환성 지원
호환성 수준 110 이상 WITHIN GROUP 에서는 예약된 키워드입니다. 자세한 내용은 호환성 수준을 참조ALTER DATABASE하세요.
비고
모든 null은 데이터 집합에서 무시됩니다.
PERCENTILE_DISC 가 비결정적입니다. 자세한 내용은 결정적 함수 및 비결정적 함수를 참조하세요.
절을 OVER 생략한 집계 형태PERCENTILE_DISC는 SQL Server, Azure SQL Database, Azure SQL Managed Instance, 또는 Fabric의 SQL 데이터베이스에서 지원되지 않습니다.
예
기본 구문 예제
다음 예제에서는 각 부서의 직원 평균 급여를 사용하고 PERCENTILE_CONTPERCENTILE_DISC 찾습니다. 동일한 값을 반환하지 않을 수 있습니다.
-
PERCENTILE_CONT는 데이터 집합에 없는 경우에도 적절한 값을 반환합니다. -
PERCENTILE_DISC는 실제 집합 값을 반환합니다.
USE AdventureWorks2022;
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
기본 구문 예제
다음 예제에서는 각 부서의 직원 평균 급여를 사용하고 PERCENTILE_CONTPERCENTILE_DISC 찾습니다. 동일한 값을 반환하지 않을 수 있습니다.
-
PERCENTILE_CONT는 데이터 집합에 없는 경우에도 적절한 값을 반환합니다. -
PERCENTILE_DISC는 실제 집합 값을 반환합니다.
-- Uses AdventureWorks
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