PERCENTILE_CONT (Transact-SQL)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsPDW (Analytics Platform System)Ponto de extremidade de SQL no Microsoft FabricWarehouse no Microsoft Fabric

Calcula um percentil baseado em uma distribuição contínua do valor da coluna em SQL Server. O resultado é interpolado e talvez não seja igual a qualquer um dos valores específicos da coluna.

Convenções de sintaxe de Transact-SQL

Sintaxe

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

Observação

Para exibir a sintaxe do Transact-SQL para o SQL Server 2014 (12.x) e versões anteriores, confira a Documentação das versões anteriores.

Argumentos

numeric_literal
O percentil a ser computado. O valor deve variar entre 0,0 e 1,0.

WITHIN GROUP ( ORDER BY order_by_expression [ ASC | DESC ] )
Especifica uma lista de valores numéricos sobre os quais classificar e computar o percentil. Apenas uma order_by_expression é permitida. A expressão precisa avaliar a um tipo numérico exato ou aproximado, nenhum outro tipo de dados sendo permitido. Os tipos numéricos exatos são: int, bigint, smallint, tinyint, numeric, bit, decimal, smallmoney e money. Os tipos numéricos aproximados são float e real. A ordem de classificação padrão é crescente.

OVER (<partition_by_clause>)
Divide o conjunto de resultados produzido pela cláusula FROM nas partições às quais a função de percentil é aplicada. Para obter mais informações, confira Cláusula OVER (Transact-SQL). A <cláusula ORDER BY> e <cláusula rows ou range> da sintaxe OVER não podem ser especificadas em uma função PERCENTILE_CONT.

Tipos de retorno

float(53)

Suporte de compatibilidade

Sob o nível de compatibilidade 110 e superior, WITHIN GROUP é uma palavra-chave reservada. Para obter mais informações, confira Nível de compatibilidade de ALTER DATABASE (Transact-SQL).

Comentários gerais

Todos os nulos do conjunto de dados são ignorados.

PERCENTILE_CONT é não determinística. Para obter mais informações, veja Funções determinísticas e não determinísticas.

Exemplos

a. Exemplo de sintaxe básica

O exemplo a seguir usa PERCENTILE_CONT e PERCENTILE_DISC para localizar o salário médio dos funcionários de cada departamento. Essas funções podem não retornar o mesmo valor. PERCENTILE_CONT interpola o valor apropriado, quer ele exista ou não no conjunto de dados, enquanto PERCENTILE_DISC sempre retorna um valor real do conjunto.

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;  

Este é um conjunto de resultados parcial.

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

B. Exemplo de sintaxe básica

O exemplo a seguir usa PERCENTILE_CONT e PERCENTILE_DISC para localizar o salário médio dos funcionários de cada departamento. Essas funções podem não retornar o mesmo valor. PERCENTILE_CONT interpola o valor apropriado, quer ele exista ou não no conjunto de dados, enquanto PERCENTILE_DISC sempre retorna um valor real do conjunto.

-- 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; 

Este é um conjunto de resultados parcial.

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

Consulte Também

PERCENTILE_DISC (Transact-SQL)