Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Instância Gerenciada de SQL do Azure
Azure Synapse Analytics
Analytics Platform System (PDW)
Ponto de extremidade de análise de SQL no Microsoft Fabric
Depósito no Microsoft Fabric
Banco de dados SQL 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 ORDER BY cláusula. Em seguida, retorna o valor com o menor CUME_DIST valor fornecido (em relação à mesma especificação de classificação) maior ou igual a P. Por exemplo, PERCENTILE_DISC (0.5) calcula o 50º percentil (ou seja, a mediana) de uma expressão.
PERCENTILE_DISC calcula o percentil com base em uma distribuição discreta dos valores de 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.
DENTRO DO GRUPO ( ORDEM POR 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.
CÂMBIO ( <partition_by_clause> )
Divide o FROM conjunto de resultados da cláusula em partições. A função de percentil é aplicada nessas partições. Para obter mais informações, consulte a cláusula SELECT - OVER. A <cláusula> ORDER BY e <linhas ou cláusula>range não podem ser especificadas em uma PERCENTILE_DISC função.
Tipos de retorno
O tipo de retorno é determinado pelo tipo order_by_expression.
Suporte de compatibilidade
No nível de compatibilidade 110 e superior, WITHIN GROUP há uma palavra-chave reservada. Para obter mais informações, consulte o nível de compatibilidade ALTER DATABASE.
Observações
Todos os nulos do conjunto de dados são ignorados.
PERCENTILE_DISC não é determinístico. Para obter mais informações, consulte 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 encontrar o salário médio dos funcionários de cada departamento. Eles podem não retornar o mesmo valor:
-
PERCENTILE_CONTretorna o valor apropriado, mesmo que ele não exista no conjunto de dados. -
PERCENTILE_DISCretorna 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;
Aqui está 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 encontrar o salário médio dos funcionários de cada departamento. Eles podem não retornar o mesmo valor:
-
PERCENTILE_CONTretorna o valor apropriado, mesmo que ele não exista no conjunto de dados. -
PERCENTILE_DISCretorna 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;
Aqui está 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