Files
email-tracker/external/duckdb/test/sql/aggregate/aggregates/test_sum.test
2025-10-24 19:21:19 -05:00

98 lines
1.7 KiB
SQL

# name: test/sql/aggregate/aggregates/test_sum.test
# description: Test sum aggregate
# group: [aggregates]
statement ok
CREATE TABLE integers(i INTEGER);
statement ok
INSERT INTO integers SELECT * FROM range(0, 1000, 1);
# positive numbers
query I
SELECT SUM(i) FROM integers;
----
499500
# negative numbers
statement ok
INSERT INTO integers SELECT * FROM range(0, -1000, -1);
query I
SELECT SUM(i) FROM integers;
----
0
# more negative numbers
statement ok
INSERT INTO integers SELECT * FROM range(0, -1000, -1);
query I
SELECT SUM(i) FROM integers;
----
-499500
# now perform sum of a constant
query I
SELECT SUM(1) FROM integers;
----
3000
# negative constant
query I
SELECT SUM(-1) FROM integers;
----
-3000
# negative constant with a low amount of values
query I
SELECT SUM(-1) FROM integers WHERE i=-1;
----
-2
# no values
query I
SELECT SUM(-1) FROM integers WHERE i>10000;
----
NULL
# bigint sum
statement ok
CREATE TABLE bigints(b BIGINT);
# a bunch of huge values
statement ok
INSERT INTO bigints SELECT * FROM range(4611686018427387904, 4611686018427388904, 1);
# sum them up
query I
SELECT SUM(b) FROM bigints
----
4611686018427388403500
# this is too big for a bigint
statement error
SELECT SUM(b)::BIGINT FROM bigints
----
Conversion Error: Type INT128 with value 4611686018427388403500
#
# Order by
#
statement ok
CREATE TABLE doubles(n DOUBLE);
statement ok
INSERT INTO doubles (n) VALUES ('9007199254740992'::DOUBLE), (1::DOUBLE), (1::DOUBLE), (0::DOUBLE);
# Correct result when ordered by size
query I
SELECT sum(n ORDER BY ABS(n))::BIGINT FROM doubles;
----
9007199254740994
# Error as an ordered aggregate
statement error
SELECT (sum(n) WITHIN GROUP(ORDER BY ABS(n)))::BIGINT FROM doubles;
----
Parser Error: Unknown ordered aggregate "sum"