Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

sumWithOverflow

sumWithOverflow

引入版本:v1.1.0

计算数值的总和,结果使用与输入参数相同的数据类型。 如果总和超过该数据类型的最大值,则按溢出方式计算。

语法

sumWithOverflow(num)

参数

返回值

值的总和。(U)Int*Float*Decimal*

示例

演示 UInt16 的溢出行为

CREATE TABLE employees
(
    id UInt32,
    name String,
    monthly_salary UInt16 -- 选择此类型是为了让值的总和产生溢出
)
ENGINE = Memory;

INSERT INTO employees VALUES
    (1, 'John', 20000),
    (2, 'Jane', 18000),
    (3, 'Bob', 12000),
    (4, 'Alice', 10000),
    (5, 'Charlie', 8000);

-- 使用 sum 和 sumWithOverflow 函数查询员工薪资总额,并通过 toTypeName 函数显示其结果类型
-- sum 函数的结果类型为 UInt64,足以容纳总和;而 sumWithOverflow 的结果类型仍保持为 UInt16。

SELECT
    sum(monthly_salary) AS no_overflow,
    sumWithOverflow(monthly_salary) AS overflow,
    toTypeName(no_overflow),
    toTypeName(overflow)
FROM employees;
┌─no_overflow─┬─overflow─┬─toTypeName(no_overflow)─┬─toTypeName(overflow)─┐
│       68000 │     2464 │ UInt64                  │ UInt16               │
└─────────────┴──────────┴─────────────────────────┴──────────────────────┘
Navigation