sumWithOverflow
도입 버전: v1.1.0
입력 매개변수와 동일한 데이터 타입을 결과 타입으로 사용하여 숫자 값의 합계를 계산합니다. 합계가 이 데이터 타입의 최댓값을 초과하면 오버플로우가 발생한 상태로 계산됩니다.
구문
sumWithOverflow(num)인수
반환 값
값의 합입니다. (U)Int* 또는 Float* 또는 Decimal*
예시
UInt16에서의 오버플로우 동작 예시
CREATE TABLE employees
(
id UInt32,
name String,
monthly_salary UInt16 -- 값의 합산 결과가 오버플로우를 일으키도록 선택된 타입
)
ENGINE = Memory;
INSERT INTO employees VALUES
(1, 'John', 20000),
(2, 'Jane', 18000),
(3, 'Bob', 12000),
(4, 'Alice', 10000),
(5, 'Charlie', 8000);
-- 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)─┐
│ 68000 │ 2464 │ UInt64 │ UInt16 │
└─────────────┴──────────┴─────────────────────────┴──────────────────────┘