CUME_DIST (Lakehouse v1)
Devuelve la distribución acumulada de un valor dado en un conjunto de valores. Calcula la proporción de filas con valores menores o iguales que el valor especificado, dividida por el número total de filas. Tenga en cuenta que el valor resultante está entre 0 y 1, ambos incluidos.
Consulte también: PERCENT_RANK
Sintaxis de Analyze
Sección titulada «Sintaxis de Analyze»func.cume_dist().over(partition_by=[<columns>], order_by=[<columns>])Ejemplos de Analyze
Sección titulada «Ejemplos de 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|Sintaxis de SQL
Sección titulada «Sintaxis de SQL»CUME_DIST() OVER ( PARTITION BY expr, ... ORDER BY expr [ASC | DESC], ...)Ejemplos de SQL
Sección titulada «Ejemplos de SQL»Este ejemplo obtiene los nombres, las calificaciones y los grados de los estudiantes, junto con los valores de distribución acumulada (cume_dist_val) dentro de cada grado, mediante la función de ventana 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|