الانتقال إلى المحتوى الرئيسي

الوصف

يمكن تطبيق المُركِّب Map على الدالة avg لحساب المتوسط الحسابي للقيم في Map وفقًا لكل مفتاح، باستخدام دالة المُركِّب التجميعي avgMap.

مثال على الاستخدام

في هذا المثال، سننشئ جدولًا يخزّن رموز الحالة وعدد مرات ظهورها عبر فترات زمنية مختلفة، بحيث يتضمن كل صف قيمة من النوع Map تربط رموز الحالة بعدد مرات ظهور كل منها. سنستخدم avgMap لحساب متوسط عدد مرات الظهور لكل رمز حالة ضمن كل فترة زمنية.
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;
ستحسب الدالة avgMap متوسط التكرار لكل رمز حالة ضمن كل فاصل زمني. على سبيل المثال:
  • في الفاصل الزمني ‘2000-01-01 00:00:00’:
    • الحالة ‘a’: 15
    • الحالة ‘b’: 25
    • الحالة ‘c’: (35 + 45) / 2 = 40
    • الحالة ‘d’: 55
    • الحالة ‘e’: 65
  • في الفاصل الزمني ‘2000-01-01 00:01:00’:
    • الحالة ‘d’: 75
    • الحالة ‘e’: 85
    • الحالة ‘f’: (95 + 105) / 2 = 100
    • الحالة ‘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} │
   └─────────────────────┴──────────────────────────────────────┘

انظر أيضًا

آخر تعديل في ٢٩ يونيو ٢٠٢٦