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

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