メインコンテンツへスキップ
メインコンテンツへスキップ

sumWithOverflow

sumWithOverflow

導入バージョン: v1.1

数値の合計を計算し、結果には入力パラメータと同じデータ型を使用します。 合計がそのデータ型の最大値を超える場合、オーバーフロー込みで計算されます。

構文

sumWithOverflow(num)

引数

戻り値

値の合計。(U)Int* または Float* または Decimal*

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