CUME_DIST (Lakehouse v1)
Renvoie la distribution cumulative d’une valeur donnée dans un ensemble de valeurs. Elle calcule la proportion de lignes dont les valeurs sont inférieures ou égales à la valeur spécifiée, divisée par le nombre total de lignes. À noter : la valeur obtenue est comprise entre 0 et 1, bornes incluses.
Voir aussi : PERCENT_RANK
Syntaxe Analyze
Section intitulée « Syntaxe Analyze »func.cume_dist().over(partition_by=[<columns>], order_by=[<columns>])Exemples Analyze
Section intitulée « Exemples 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|Syntaxe SQL
Section intitulée « Syntaxe SQL »CUME_DIST() OVER ( PARTITION BY expr, ... ORDER BY expr [ASC | DESC], ...)Exemples SQL
Section intitulée « Exemples SQL »Cet exemple récupère les noms, les notes et les niveaux des étudiants, ainsi que les valeurs de distribution cumulative (cume_dist_val) au sein de chaque niveau, à l’aide de la fonction de fenêtrage 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|