다음을 통해 공유


PERCENTILE_DISC(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의 전체 행 집합에 정렬된 값 또는 행 집합의 고유 파티션 내에 정렬된 값의 특정 백분위수를 계산합니다. 지정된 백분위수 값 P에 대해 PERCENTILE_DISC는 ORDER BY 절의 식 값을 정렬합니다. P보다 크거나 같은 가장 작은 지정된 CUME_DIST 값(동일한 정렬 사양 기준)을 반환합니다. 예를 들어 PERCENTILE_DISC (0.5)는 식의 50번째 백분위수(즉, 중앙값)를 컴퓨팅합니다. PERCENTILE_DISC는 열 값의 불연속 분포를 기반으로 백분위수를 계산합니다. 결과는 열의 특정 값과 같습니다.

Transact-SQL 구문 표기 규칙

구문

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 함수는 해당 파티션에 적용됩니다. 자세한 내용은 OVER 절(Transact-SQL)을 참조하세요. <ORDER BY 절> 및 <rows 또는 range 절>은 PERCENTILE_DISC 함수에 지정할 수 없습니다.

반환 형식

반환 형식은 order_by_expression 형식에 의해 결정됩니다.

호환성 지원

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

일반적인 주의 사항

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

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

기본 구문 예제

다음 예에서는 PERCENTILE_CONT 및 PERCENTILE_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 및 분석 플랫폼 시스템(PDW)

기본 구문 예제

다음 예에서는 PERCENTILE_CONT 및 PERCENTILE_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

참고 항목

PERCENTILE_CONT(Transact-SQL)