Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

maxMap

説明

Map コンビネータは、max 関数に適用でき、集約コンビネータ関数 maxMap を使用して、Map 内の各キーごとの最大値を計算できます。

使用例

この例では、時間帯ごとのステータスコードとその件数を格納するテーブルを作成します。 各行には、ステータスコードと対応する件数の Map が含まれます。各時間帯における各ステータスコードの最大件数を求めるために、 maxMap を使用します。

Querysql
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,
    maxMap(status),
FROM metrics
GROUP BY timeslot;

maxMap 関数は、各タイムスロット内の各ステータスコードについて、最大カウントを求めます。例えば:

  • タイムスロット '2000-01-01 00:00:00':
    • ステータス 'a': 15
    • ステータス 'b': 25
    • ステータス 'c': max(35, 45) = 45
    • ステータス 'd': 55
    • ステータス 'e': 65
  • タイムスロット '2000-01-01 00:01:00':
    • ステータス 'd': 75
    • ステータス 'e': 85
    • ステータス 'f': max(95, 105) = 105
    • ステータス 'g': max(115, 125) = 125
Responseresponse
   ┌────────────timeslot─┬─maxMap(status)───────────────────────┐
1. │ 2000-01-01 00:01:00 │ {'d':75,'e':85,'f':105,'g':125}      │
2. │ 2000-01-01 00:00:00 │ {'a':15,'b':25,'c':45,'d':55,'e':65} │
   └─────────────────────┴──────────────────────────────────────┘

関連項目

Navigation