Resumo : neste tutorial, você aprenderá como usar a CUME_DIST()
função MySQL para calcular o valor de distribuição cumulativa.
Visão geral da função MySQL CUME_DIST()
A CUME_DIST()
é uma função de janela que retorna a distribuição cumulativa de um valor dentro de um conjunto de valores. Representa o número de linhas com valores menores ou iguais ao valor dessa linha dividido pelo número total de linhas.
O valor retornado da CUME_DIST()
função é maior que zero e menor ou igual a um (0 < CUME_DIST()
<= 1). Os valores repetidos da coluna recebem o mesmo CUME_DIST()
valor.
O seguinte mostra a sintaxe da CUME_DIST()
função:
CUME_DIST()
OVER (
PARTITION BY expr
ORDER BY expr [ASC | DESC]
)
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Nesta sintaxe:
PARTIÇÃO POR
A PARTITION BY
cláusula divide o conjunto de resultados em partições às quais a CUME_DIST()
função é aplicada de forma independente. Se você omitir a cláusula PARTITION BY, a função será aplicada a todo o conjunto de resultados.
ORDENAR POR
A ORDER BY
cláusula especifica a ordem das linhas em cada partição ou todo o conjunto de resultados caso seja PARTITION BY
omitido.
A CUME_DIST()
função calcula o valor de distribuição cumulativo de cada linha com base na sua ordem na partição.
A fórmula aproximada da CUME_DIST()
função é a seguinte:
ROW_NUMBER() / total_rows
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Exemplo de função MySQL CUME_DIST()
Vamos criar uma tabela chamada scores
e preencher alguns dados para demonstração:
CREATE TABLE scores (
name VARCHAR(20) PRIMARY KEY,
score INT NOT NULL
);
INSERT INTO
scores(name, score)
VALUES
('Smith',81),
('Jones',55),
('Williams',55),
('Taylor',62),
('Brown',62),
('Davies',84),
('Evans',87),
('Wilson',72),
('Thomas',72),
('Johnson',100);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A instrução a seguir usa a CUME_DIST()
função para encontrar a distribuição cumulativa da pontuação no conjunto de resultados:
SELECT
name,
score,
ROW_NUMBER() OVER (
ORDER BY
score
) row_num,
CUME_DIST() OVER (
ORDER BY
score
) cume_dist_val
FROM
scores;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Aqui está a saída:
Neste exemplo, a pontuação é classificada em ordem crescente de 55 a 100. Observe que a ROW_NUMBER()
função foi adicionada para referência.
Então, como a CUME_DIST()
função realiza cálculos?
Na etapa inicial, a função identifica o número de linhas no conjunto de resultados onde os valores são menores ou iguais a 55. Essa contagem é 2 para a primeira linha. A seguir, a CUME_DIST()
função calcula a distribuição cumulativa dividindo essa contagem (2) pelo número total de linhas no conjunto, que é 10: 2/10. O resultado é 0,2 ou 20%. O mesmo procedimento é então repetido para a segunda linha.
No caso da terceira linha, a CUME_DIST()
função identifica quatro linhas dentro do conjunto de resultados onde os valores são menores ou iguais a 62. então, a CUME_DIST()
função calcula a distribuição cumulativa dividindo esta contagem (4) pelo número total de linhas em o conjunto, que é 10: 4/10. O resultado é 0,4 ou 40%.
A mesma lógica de cálculo é aplicada às linhas restantes.
Resumo
- Use a função MySQL
CUME_DIST()
para calcular a distribuição cumulativa de um valor em um conjunto de valores.