CUME_DIST (Lakehouse v1)
Zwraca rozkład skumulowany podanej wartości w zbiorze wartości. Oblicza proporcję wierszy, których wartości są mniejsze lub równe podanej wartości, podzieloną przez łączną liczbę wierszy. Uwaga: wynikowa wartość mieści się w przedziale od 0 do 1 włącznie.
Zobacz też: PERCENT_RANK
Składnia Analyze
Dział zatytułowany „Składnia Analyze”func.cume_dist().over(partition_by=[<columns>], order_by=[<columns>])Przykłady Analyze
Dział zatytułowany „Przykłady 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|Składnia SQL
Dział zatytułowany „Składnia SQL”CUME_DIST() OVER ( PARTITION BY expr, ... ORDER BY expr [ASC | DESC], ...)Przykłady SQL
Dział zatytułowany „Przykłady SQL”Ten przykład pobiera imiona uczniów, ich wyniki, oceny oraz wartości rozkładu skumulowanego (cume_dist_val) w obrębie każdej oceny za pomocą funkcji okna 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|