> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-fix-nav-issues.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> 根据 `key` 数组中指定的键，对 `value` 数组中的值进行汇总。返回一个由两个数组组成的元组：按排序顺序排列的键，以及与这些键对应的汇总值。与 sumMap 函数不同的是，它在求和时会发生溢出。

# sumMapWithOverflow

<div id="sumMapWithOverflow">
  ## sumMapWithOverflow
</div>

引入版本：v20.1.0

根据 `key` 数组中指定的键对 `value` 数组进行汇总。返回一个由两个数组组成的元组：按排序顺序排列的键，以及对应键汇总后的值。
它与 [`sumMap`](/zh/reference/functions/aggregate-functions/sumMap) 函数的区别在于，它在求和时会发生溢出——也就是说，求和结果的数据类型与参数的数据类型相同。

<Note>
  * 传入由键数组和值数组组成的元组，与传入一个键数组和一个值数组是等价的。
  * 对于参与汇总的每一行，`key` 和 `value` 中的元素个数必须相同。
</Note>

**语法**

```sql theme={null}
sumMapWithOverflow(key, value)
sumMapWithOverflow(Tuple(key, value))
```

**参数**

* `key` — 键数组。[`Array`](/zh/reference/data-types/array)
* `value` — 值数组。[`Array`](/zh/reference/data-types/array)

**返回值**

返回一个包含两个数组的元组：按排序后的顺序排列的键，以及对应键的值之和。[`Tuple(Array, Array)`](/zh/reference/data-types/tuple)

**示例**

**演示溢出行为的 Array 语法**

```sql title=Query theme={null}
CREATE TABLE sum_map(
    date Date,
    timeslot DateTime,
    statusMap Nested(
        status UInt8,
        requests UInt8
    ),
    statusMapTuple Tuple(Array(Int8), Array(Int8))
) ENGINE = Memory;

INSERT INTO sum_map VALUES
    ('2000-01-01', '2000-01-01 00:00:00', [1, 2, 3], [10, 10, 10], ([1, 2, 3], [10, 10, 10])),
    ('2000-01-01', '2000-01-01 00:00:00', [3, 4, 5], [10, 10, 10], ([3, 4, 5], [10, 10, 10])),
    ('2000-01-01', '2000-01-01 00:01:00', [4, 5, 6], [10, 10, 10], ([4, 5, 6], [10, 10, 10])),
    ('2000-01-01', '2000-01-01 00:01:00', [6, 7, 8], [10, 10, 10], ([6, 7, 8], [10, 10, 10]));

SELECT
    timeslot,
    toTypeName(sumMap(statusMap.status, statusMap.requests)),
    toTypeName(sumMapWithOverflow(statusMap.status, statusMap.requests))
FROM sum_map
GROUP BY timeslot;
```

```response title=Response theme={null}
┌────────────timeslot─┬─toTypeName(sumMap⋯usMap.requests))─┬─toTypeName(sumMa⋯usMap.requests))─┐
│ 2000-01-01 00:01:00 │ Tuple(Array(UInt8), Array(UInt64)) │ Tuple(Array(UInt8), Array(UInt8)) │
│ 2000-01-01 00:00:00 │ Tuple(Array(UInt8), Array(UInt64)) │ Tuple(Array(UInt8), Array(UInt8)) │
└─────────────────────┴────────────────────────────────────┴───────────────────────────────────┘
```

**使用 Tuple 语法可得到相同结果**

```sql title=Query theme={null}
SELECT
    timeslot,
    toTypeName(sumMap(statusMapTuple)),
    toTypeName(sumMapWithOverflow(statusMapTuple))
FROM sum_map
GROUP BY timeslot;
```

```response title=Response theme={null}
┌────────────timeslot─┬─toTypeName(sumMap(statusMapTuple))─┬─toTypeName(sumM⋯tatusMapTuple))─┐
│ 2000-01-01 00:01:00 │ Tuple(Array(Int8), Array(Int64))   │ Tuple(Array(Int8), Array(Int8)) │
│ 2000-01-01 00:00:00 │ Tuple(Array(Int8), Array(Int64))   │ Tuple(Array(Int8), Array(Int8)) │
└─────────────────────┴────────────────────────────────────┴─────────────────────────────────┘
```

**另请参阅**

* [sumMap](/zh/reference/functions/aggregate-functions/sumMap)
