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

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