sumWithOverflow
Introduit dans : v1.1.0
Calcule la somme de valeurs numériques, en utilisant pour le résultat le même type de données que pour les paramètres d’entrée. Si la somme dépasse la valeur maximale de ce type de données, elle est calculée avec débordement.
Syntaxe
sumWithOverflow(num)Arguments
Valeur renvoyée
La somme des valeurs. (U)Int* ou Float* ou Decimal*
Exemples
Illustration du comportement en cas de dépassement de capacité avec UInt16
CREATE TABLE employees
(
id UInt32,
name String,
monthly_salary UInt16 -- selected so that the sum of values produces an overflow
)
ENGINE = Memory;
INSERT INTO employees VALUES
(1, 'John', 20000),
(2, 'Jane', 18000),
(3, 'Bob', 12000),
(4, 'Alice', 10000),
(5, 'Charlie', 8000);
-- Query for the total amount of the employee salaries using the sum and sumWithOverflow functions and show their types using the toTypeName function
-- For the sum function the resulting type is UInt64, big enough to contain the sum, whilst for sumWithOverflow the resulting type remains as 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)─┐
│ 68000 │ 2464 │ UInt64 │ UInt16 │
└─────────────┴──────────┴─────────────────────────┴──────────────────────┘