CUME_DIST (Lakehouse v1)
Retorna a distribuição cumulativa de um valor em um conjunto de valores. Calcula a proporção de linhas com valores menores ou iguais ao valor especificado, dividida pelo número total de linhas. Observação: o valor resultante fica entre 0 e 1, inclusive.
Veja também: PERCENT_RANK
Sintaxe do Analyze
Seção intitulada “Sintaxe do Analyze”func.cume_dist().over(partition_by=[<columns>], order_by=[<columns>])Exemplos do Analyze
Seção intitulada “Exemplos do Analyze”table.name, table.score, table.grade, func.cume_dist().over(partition_by=[table.grade], order_by=table.score).alias('cume_dist_val')
name |score|grade|cume_dist_val|--------+-----+-----+-------------+Smith | 81|A | 0.25|Davies | 84|A | 0.5|Evans | 87|A | 0.75|Johnson | 100|A | 1.0|Taylor | 62|B | 0.5|Brown | 62|B | 0.5|Wilson | 72|B | 1.0|Thomas | 72|B | 1.0|Jones | 55|C | 1.0|Williams| 55|C | 1.0|Sintaxe SQL
Seção intitulada “Sintaxe SQL”CUME_DIST() OVER ( PARTITION BY expr, ... ORDER BY expr [ASC | DESC], ...)Exemplos de SQL
Seção intitulada “Exemplos de SQL”Este exemplo recupera os nomes, as notas, os conceitos e os valores de distribuição cumulativa (cume_dist_val) dos alunos dentro de cada conceito, usando a função de janela CUME_DIST().
CREATE TABLE students ( name VARCHAR(20), score INT NOT NULL, grade CHAR(1) NOT NULL);
INSERT INTO students (name, score, grade)VALUES ('Smith', 81, 'A'), ('Jones', 55, 'C'), ('Williams', 55, 'C'), ('Taylor', 62, 'B'), ('Brown', 62, 'B'), ('Davies', 84, 'A'), ('Evans', 87, 'A'), ('Wilson', 72, 'B'), ('Thomas', 72, 'B'), ('Johnson', 100, 'A');
SELECT name, score, grade, CUME_DIST() OVER (PARTITION BY grade ORDER BY score) AS cume_dist_valFROM students;
name |score|grade|cume_dist_val|--------+-----+-----+-------------+Smith | 81|A | 0.25|Davies | 84|A | 0.5|Evans | 87|A | 0.75|Johnson | 100|A | 1.0|Taylor | 62|B | 0.5|Brown | 62|B | 0.5|Wilson | 72|B | 1.0|Thomas | 72|B | 1.0|Jones | 55|C | 1.0|Williams| 55|C | 1.0|