Share via


PERCENTILE_CONT(Transact-SQL)

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System(PDW)Microsoft Fabric의 SQL 분석 엔드포인트Microsoft Fabric의 Warehouse

SQL Server 데이터베이스 엔진 열 값의 연속 분포를 기반으로 백분위수 계산 결과는 보간되며 열의 특정 값과 같지 않을 수 있습니다.

Transact-SQL 구문 표기 규칙

Syntax

PERCENTILE_CONT ( numeric_literal )
    WITHIN GROUP ( ORDER BY order_by_expression [ ASC | DESC ] )
    OVER ( [ <partition_by_clause> ] )

참고 항목

SQL Server 2014(12.x) 이전 버전의 Transact-SQL 구문을 보려면 이전 버전 설명서를 참조하세요.

인수

numeric_literal

계산할 백분위수입니다. 값의 범위는 다음 사이 0.0 여야 1.0합니다.

WITHIN GROUP(order by order_by_expression )

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

OVER( <partition_by_clause> )

절에서 생성된 결과 집합을 FROM 백분위수 함수가 적용되는 파티션으로 나눕니다. 자세한 내용은 SELECT - OVER 절을 참조하세요. ORDER BY 함수에서 OVER 구문과 <rows or range clause> 절을 지정할 PERCENTILE_CONT 수 없습니다.

반환 형식

float(53)

호환성 지원

WITHIN GROUP는 호환성 수준110부터 시작하는 예약된 키워드(keyword). 자세한 내용은 ALTER DATABASE 호환성 수준을 참조하세요.

설명

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

PERCENTILE_CONT는 비결정적입니다. 자세한 내용은 Deterministic and Nondeterministic Functions을 참조하세요.

예제

이 문서의 Transact-SQL 코드 샘플은 AdventureWorks2022 샘플 데이터베이스를 사용하며, 이는 Microsoft SQL Server 예시 및 커뮤니티 프로젝트(Microsoft SQL Server Samples and Community Projects) 홈 페이지에서 다운로드할 수 있습니다.

A. 부서당 평균 직원 급여 찾기

다음 예제에서는 각 부서에서 직원 급여의 중간값을 사용하고 PERCENTILE_CONTPERCENTILE_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_CONTPERCENTILE_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