Compartilhar via


PERCENTILE_DISC (Transact-SQL)

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics PDW (Analytics Platform System) Ponto de extremidade de análise do SQL Warehouse no Microsoft Fabric

Computa um percentil específico para obter valores classificados em um conjunto de linhas inteiro ou dentro de partições distintas de um conjunto de linhas no SQL Server. Para um determinado valor de percentil P, PERCENTILE_DISC classifica os valores de expressão na cláusula ORDER BY. Então ele retorna o valor com o menor valor CUME_DIST fornecido (com relação à mesma especificação de classificação) que é maior ou igual a P. Por exemplo, PERCENTILE_DISC (0,5) computará o 50º percentil (ou seja, a mediana) de uma expressão. O PERCENTILE_DISC calcula o percentil com base em uma distribuição discreta dos valores da coluna. O resultado é igual a um valor de coluna específica.

Convenções de sintaxe de Transact-SQL

Sintaxe

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

Argumentos

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 sobre os quais classificar e calcular o percentil. Apenas uma order_by_expression é permitida. A ordem de classificação padrão é crescente. A lista de valores pode ser de qualquer um dos tipos de dados válidos para a operação de classificação.

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

Tipos de retorno

O tipo de retorno é determinado pelo tipo order_by_expression.

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_DISC é não determinística. Para obter mais informações, veja Funções determinísticas e não determinísticas.

Exemplos

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. Eles podem não retornar o mesmo valor:

  • PERCENTILE_CONT retorna o valor apropriado, mesmo se ele não existir no conjunto de dados.
  • PERCENTILE_DISC retorna um valor de conjunto real.
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

Exemplos: Azure Synapse Analytics e PDW (Analytics Platform System)

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. Eles podem não retornar o mesmo valor:

  • PERCENTILE_CONT retorna o valor apropriado, mesmo se ele não existir no conjunto de dados.
  • PERCENTILE_DISC retorna um valor de conjunto real.
-- 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_CONT (Transact-SQL)