98 lines
1.7 KiB
SQL
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" |