PERCENTILE_CONT (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_CONT função calcula um percentil com base numa distribuição contínua do valor da coluna no Mecanismo de Banco de Dados do 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

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

PERCENTILE_CONT ( numeric_literal )
    WITHIN GROUP ( ORDER BY order_by_expression [ ASC | DESC ] )

Sintaxe da função analítica:

PERCENTILE_CONT ( numeric_literal )
    WITHIN GROUP ( ORDER BY order_by_expression [ ASC | DESC ] 
    [ OVER ( [ <partition_by_clause> ] ) ]
    )
    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.

Note

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

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 ALTER DATABASE Nível de Compatibilidade.

Observações

A forma agregada de PERCENTILE_CONT, 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.

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 utilizam a AdventureWorks2025, AdventureWorksDW2025, ou AdventureWorksLT2025 base de dados de exemplos, que pode descarregar do repositório GitHub do Azure Data SQL Samples Repository.

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

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