CUME_DIST (Transact-SQL)
Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics Ponto de extremidade de análises SQL no Microsoft Fabric Warehouse no Microsoft Fabric
Para SQL Server, essa função calcula a distribuição cumulativa com um valor em um grupo de valores. Em outras palavras, CUME_DIST
computa a posição relativa de um valor especificado em um grupo de valores. Supondo a ordenação ascendente, o CUME_DIST
de um valor na linha r é definido como o número de linhas com valores menores ou iguais ao valor de r, dividido pelo número de linhas avaliadas no conjunto de resultados da consulta ou partição. CUME_DIST
é semelhante à função PERCENT_RANK
.
Convenções de sintaxe de Transact-SQL
Sintaxe
CUME_DIST( )
OVER ( [ partition_by_clause ] order_by_clause )
Argumentos
OVER ( [ partition_by_clause ] order_by_clause)
A partition_by_clause divide o conjunto de resultados produzido pela cláusula FROM em partições às quais a função é aplicada. Se o argumento partition_by_clause não tiver sido especificado, CUME_DIST
tratará todas as linhas do conjunto de resultados da consulta como um único grupo. A order_by_clause determina a ordem lógica na qual a operação ocorre. O CUME_DIST
exige a order_by_clause. O CUME_DIST
não aceitará a <cláusula rows or range> da sintaxe OVER. Para obter mais informações, confira Cláusula OVER (Transact-SQL).
Tipos de retorno
float(53)
Comentários
O CUME_DIST
retorna um intervalo de valores maior que 0 e menor que ou igual a 1. Valores vinculados são sempre avaliados com o mesmo valor de distribuição cumulativo. O CUME_DIST
inclui valores NULL por padrão e trata esses valores como os menores valores possíveis.
CUME_DIST
é não determinístico. Para obter mais informações, veja Funções determinísticas e não determinísticas.
Exemplos
O exemplo a seguir usa a função CUME_DIST
para calcular o percentil do salário de cada funcionário dentro de um determinado departamento. O CUME_DIST
retorna um valor que representa a porcentagem de funcionários que tem um salário menor que ou igual ao funcionário atual no mesmo departamento. A função PERCENT_RANK
calcula a classificação da porcentagem do salário do funcionário dentro de um departamento. Para particionar as linhas do conjunto de resultados por departamento, o exemplo especifica o valor partition_by_clause. A cláusula ORDER BY da cláusula OVER ordena logicamente as linhas em cada partição. A cláusula ORDER BY da instrução SELECT determina a ordem de exibição do conjunto de resultados.
USE AdventureWorks2022;
GO
SELECT Department, LastName, Rate,
CUME_DIST () OVER (PARTITION BY Department ORDER BY Rate) AS CumeDist,
PERCENT_RANK() OVER (PARTITION BY Department ORDER BY Rate ) AS PctRank
FROM HumanResources.vEmployeeDepartmentHistory AS edh
INNER JOIN HumanResources.EmployeePayHistory AS e
ON e.BusinessEntityID = edh.BusinessEntityID
WHERE Department IN (N'Information Services',N'Document Control')
ORDER BY Department, Rate DESC;
Veja a seguir o conjunto de resultados.
Department LastName Rate CumeDist PctRank
---------------------- ---------------------- --------------------- ---------------------- ----------------------
Document Control Arifin 17.7885 1 1
Document Control Norred 16.8269 0.8 0.5
Document Control Kharatishvili 16.8269 0.8 0.5
Document Control Chai 10.25 0.4 0
Document Control Berge 10.25 0.4 0
Information Services Trenary 50.4808 1 1
Information Services Conroy 39.6635 0.9 0.888888888888889
Information Services Ajenstat 38.4615 0.8 0.666666666666667
Information Services Wilson 38.4615 0.8 0.666666666666667
Information Services Sharma 32.4519 0.6 0.444444444444444
Information Services Connelly 32.4519 0.6 0.444444444444444
Information Services Berg 27.4038 0.4 0
Information Services Meyyappan 27.4038 0.4 0
Information Services Bacon 27.4038 0.4 0
Information Services Bueno 27.4038 0.4 0
(15 row(s) affected)