Partilhar via


PERCENTILE_CONT (Transact-SQL)

Aplica-se a:SQL ServerBase de Dados SQL do AzureInstância Gerida do Azure SQLAzure Synapse AnalyticsSistema de Plataforma de Análise (PDW)Ponto de Extremidade de Análise SQL no Microsoft FabricArmazém no Microsoft FabricBase de Dados SQL no Microsoft Fabric

Calcula um percentil com base numa distribuição contínua do valor da coluna no Motor de Base de Dados SQL Server. O resultado é interpolado e pode não ser igual a nenhum dos valores específicos da coluna.

Transact-SQL convenções de sintaxe

Sintaxe

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

Arguments

numeric_literal

O percentil a calcular. O valor deve variar entre 0.0 e 1.0.

DENTRO DO GRUPO ( ORDEM POR order_by_expression )

Especifica uma lista de valores numéricos para classificar e calcular o percentil. Só é permitida uma order_by_expression . A expressão deve ser avaliada para um tipo numérico exato ou aproximado, sem outros tipos de dados permitidos. Os tipos numéricos exatos são int, bigint, smallint, tinyint, numeric, bit, decimal, smallmoney e money. Os tipos numéricos aproximados são flutuante e real. A ordem de classificação padrão é crescente.

MAIS ( <partition_by_clause> )

Divide o conjunto de resultados produzido pela FROM cláusula em partições às quais a função percentil é aplicada. Para mais informações, consulte a Cláusula SELECT - OVER. A ORDER BY cláusula e <rows or range clause> da OVER sintaxe não pode ser especificada numa PERCENTILE_CONT função.

Tipos de devolução

Flutuar (53)

Suporte de compatibilidade

WITHIN GROUP é uma palavra-chave reservada, começando pelo nível 110de compatibilidade . Para mais informações, consulte Nível de Compatibilidade ALTER DATABASE.

Observações

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

PERCENTILE_CONT é não determinística. Para mais informações, consulte Funções Determinísticas e Não Determinísticas.

Examples

Os exemplos de código neste artigo usam o banco de dados de exemplo AdventureWorks2025 ou AdventureWorksDW2025, que pode ser descarregado da página inicial de Exemplos e Projetos da Comunidade do Microsoft SQL Server.

A. Encontre o salário mediano dos funcionários por departamento

O exemplo seguinte utiliza PERCENTILE_CONT e PERCENTILE_DISC para encontrar o salário mediano dos funcionários em cada departamento. Estas funções podem não devolver o mesmo valor. PERCENTILE_CONT interpola o valor apropriado, que pode ou não existir no conjunto de dados, enquanto PERCENTILE_DISC retorna sempre um valor real do conjunto.

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;

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 and Analytics Platform System (PDW)

O exemplo seguinte utiliza a base de AdventureWorksDW2012 dados de exemplo.

B. Encontre o salário mediano dos funcionários por departamento

O exemplo seguinte utiliza PERCENTILE_CONT e PERCENTILE_DISC para encontrar o salário mediano dos funcionários em cada departamento. Estas funções podem não devolver o mesmo valor. PERCENTILE_CONT interpola o valor apropriado, que pode ou não existir no conjunto de dados, enquanto PERCENTILE_DISC retorna sempre um valor real do conjunto.

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