PERCENTILE_DISC (Transact-SQL)

Aplica-se a:SQL ServerBase de Dados SQL do AzureAzure SQL Managed InstanceAzure Synapse AnalyticsEndpoint de análise SQL no Microsoft FabricArmazém no Microsoft FabricBase de dados SQL no Microsoft Fabric

A PERCENTILE_DISC função calcula um percentil específico para valores ordenados num conjunto inteiro de linhas ou dentro das partições distintas de um conjunto de linhas. Para um determinado valor de percentil P, PERCENTILE_DISC classifica os ORDER BY valores de expressão na cláusula. Em seguida, ele retorna o valor com o menor CUME_DIST valor dado (em relação à mesma especificação de classificação) que é maior ou igual a P. Por exemplo, PERCENTILE_DISC (0.5) calcula o percentil 50 (ou seja, a mediana) de uma expressão. PERCENTILE_DISC Calcula o percentil com base numa distribuição discreta dos valores da coluna. O resultado é igual a um valor de coluna específico.

Transact-SQL convenções de sintaxe

Sintaxe

Sintaxe da função de agregação:

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

Sintaxe da função analítica:

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

Arguments

literal

O percentil a calcular. O valor deve variar entre 0,0 e 1,0.

DENTRO DO GRUPO ( ORDEM POR order_by_expression [ ASC | DESC ] )

Especifica uma lista de valores para classificar e calcular o percentil. Só é permitida uma order_by_expression . 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.

MAIS ( <partition_by_clause> )

Divide o conjunto de resultados da FROM cláusula em partições. A função percentil é aplicada a essas partições. Para obter mais informações, consulte Cláusula SELECT - OVER. A <cláusula> ORDER BY e <as linhas ou a cláusula>range não podem ser especificadas em uma PERCENTILE_DISC função.

Observação

A OVER cláusula é opcional no Fabric Data Warehouse e no endpoint de análise SQL. PERCENTILE_DISC pode ser usado em forma agregada ou analítica (janela).

Tipos de devolução

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 mais informações, veja ALTER DATABASE nível de compatibilidade.

Observações

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

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

A forma agregada de PERCENTILE_DISC, que omite a OVER cláusula, não é suportada no SQL Server, Base de Dados SQL do Azure, Azure SQL Managed Instance ou base de dados SQL no Fabric.

Examples

Exemplo de sintaxe básica

O exemplo a seguir usa PERCENTILE_CONT e PERCENTILE_DISC para encontrar 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 que ele não exista no conjunto de dados.
  • PERCENTILE_DISC Retorna um valor definido 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;

Aqui está um conjunto de resultados parciais.

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

Exemplo de sintaxe básica

O exemplo a seguir usa PERCENTILE_CONT e PERCENTILE_DISC para encontrar 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 que ele não exista no conjunto de dados.
  • PERCENTILE_DISC Retorna um valor definido 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;

Aqui está um conjunto de resultados parciais.

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