Passer au contenu principal

Description

Le combinateur Map peut être appliqué à la fonction avg pour calculer la moyenne arithmétique des valeurs d’une Map pour chaque clé, à l’aide de la fonction de combinateur d’agrégation avgMap.

Exemple d’utilisation

Dans cet exemple, nous allons créer une table qui stocke des codes d’état et leur nombre d’occurrences pour différents créneaux horaires, où chaque ligne contient une Map associant les codes d’état à leur nombre d’occurrences correspondant. Nous utiliserons avgMap pour calculer le nombre moyen pour chaque code d’état au sein de chaque créneau horaire.
Query
CREATE TABLE metrics(
    date Date,
    timeslot DateTime,
    status Map(String, UInt64)
) ENGINE = MergeTree
ORDER BY ();

INSERT INTO metrics VALUES
    ('2000-01-01', '2000-01-01 00:00:00', (['a', 'b', 'c'], [15, 25, 35])),
    ('2000-01-01', '2000-01-01 00:00:00', (['c', 'd', 'e'], [45, 55, 65])),
    ('2000-01-01', '2000-01-01 00:01:00', (['d', 'e', 'f'], [75, 85, 95])),
    ('2000-01-01', '2000-01-01 00:01:00', (['f', 'g', 'g'], [105, 115, 125]));

SELECT
    timeslot,
    avgMap(status),
FROM metrics
GROUP BY timeslot;
La fonction avgMap calcule le nombre moyen pour chaque code d’état dans chaque intervalle de temps. Par exemple :
  • Dans l’intervalle de temps ‘2000-01-01 00:00:00’ :
    • Code d’état ‘a’ : 15
    • Code d’état ‘b’ : 25
    • Code d’état ‘c’ : (35 + 45) / 2 = 40
    • Code d’état ‘d’ : 55
    • Code d’état ‘e’ : 65
  • Dans l’intervalle de temps ‘2000-01-01 00:01:00’ :
    • Code d’état ‘d’ : 75
    • Code d’état ‘e’ : 85
    • Code d’état ‘f’ : (95 + 105) / 2 = 100
    • Code d’état ‘g’ : (115 + 125) / 2 = 120
Response
   ┌────────────timeslot─┬─avgMap(status)───────────────────────┐
1. │ 2000-01-01 00:01:00 │ {'d':75,'e':85,'f':100,'g':120}      │
2. │ 2000-01-01 00:00:00 │ {'a':15,'b':25,'c':40,'d':55,'e':65} │
   └─────────────────────┴──────────────────────────────────────┘

Voir aussi

Dernière modification le 29 juin 2026