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
我们使用 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)─┐
1. │ 118700 │ 53164 │ UInt64 │ UInt16 │
└─────────────┴──────────┴─────────────────────────┴──────────────────────┘