Passer au contenu principal
Calcule la distribution cumulative d’une valeur au sein d’un groupe de valeurs, c’est-à-dire le pourcentage de lignes dont la valeur est inférieure ou égale à celle de la ligne courante. Cette fonction peut être utilisée pour déterminer la position relative d’une valeur au sein d’une partition. Syntaxe
cume_dist ()
  OVER ([[PARTITION BY grouping_column] [ORDER BY sorting_column]
        [RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING]] | [window_name])
FROM table_name
WINDOW window_name as ([PARTITION BY grouping_column] [ORDER BY sorting_column] RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
La définition du cadre de fenêtre, obligatoire et utilisée par défaut, est RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING. Pour plus de détails sur la syntaxe des fonctions de fenêtre, voir : Fonctions de fenêtre - Syntaxe. Valeur renvoyée
  • Le rang relatif de la ligne actuelle. Le type de retour est Float64 dans l’intervalle [0, 1]. Float64.
Exemple L’exemple suivant calcule la distribution cumulative des salaires au sein d’une équipe :
Query
CREATE TABLE salaries
(
    `team` String,
    `player` String,
    `salary` UInt32,
    `position` String
)
Engine = Memory;

INSERT INTO salaries FORMAT Values
    ('Port Elizabeth Barbarians', 'Gary Chen', 195000, 'F'),
    ('New Coreystad Archdukes', 'Charles Juarez', 190000, 'F'),
    ('Port Elizabeth Barbarians', 'Michael Stanley', 150000, 'D'),
    ('New Coreystad Archdukes', 'Scott Harrison', 150000, 'D'),
    ('Port Elizabeth Barbarians', 'Robert George', 195000, 'M'),
    ('South Hampton Seagulls', 'Douglas Benson', 150000, 'M'),
    ('South Hampton Seagulls', 'James Henderson', 140000, 'M');
Query
SELECT player, salary,
       cume_dist() OVER (ORDER BY salary DESC) AS cume_dist
FROM salaries;
Response
   ┌─player──────────┬─salary─┬───────────cume_dist─┐
1. │ Robert George   │ 195000 │  0.2857142857142857 │
2. │ Gary Chen       │ 195000 │  0.2857142857142857 │
3. │ Charles Juarez  │ 190000 │ 0.42857142857142855 │
4. │ Douglas Benson  │ 150000 │  0.8571428571428571 │
5. │ Michael Stanley │ 150000 │  0.8571428571428571 │
6. │ Scott Harrison  │ 150000 │  0.8571428571428571 │
7. │ James Henderson │ 140000 │                   1 │
   └─────────────────┴────────┴─────────────────────┘
Détails d’implémentation La fonction cume_dist() calcule la position relative à l’aide de la formule suivante :
cume_dist = (number of rows ≤ current row value) / (total number of rows in partition)
Les lignes ayant des valeurs égales (ex æquo) reçoivent la même valeur de distribution cumulative, qui correspond à la position la plus élevée du groupe ex æquo.
Dernière modification le 25 juin 2026