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

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