跳到主要内容
跳到主要内容

sumWithOverflow

计算数字的总和,结果的数据类型与输入参数的数据类型相同。如果总和超过此数据类型的最大值,则会计算溢出。

仅适用于数字。

语法

sumWithOverflow(num)

参数

返回值

示例

首先,我们创建一个表 employees 并向其中插入一些虚构的员工数据。在本示例中,我们将 salary 选择为 UInt16,以便这些值的总和可能会产生溢出。

查询

CREATE TABLE employees
(
`id` UInt32,
`name` String,
`monthly_salary` UInt16
)
ENGINE = Log
SELECT
sum(monthly_salary) AS no_overflow,
sumWithOverflow(monthly_salary) AS overflow,
toTypeName(no_overflow),
toTypeName(overflow)
FROM employees

我们查询员工薪资的总额,使用 sumsumWithOverflow 函数,并使用 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)─┐
1. │ 118700 │ 53164 │ UInt64 │ UInt16 │
└─────────────┴──────────┴─────────────────────────┴──────────────────────┘