Перейти к основному содержимому
Перейти к основному содержимому

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               │
   └─────────────┴──────────┴─────────────────────────┴──────────────────────┘