153 lines
2.5 KiB
SQL
153 lines
2.5 KiB
SQL
# name: test/optimizer/statistics/statistics_aggregate.test
|
|
# description: Statistics propagation test with aggregates expression
|
|
# group: [statistics]
|
|
|
|
statement ok
|
|
SET default_null_order='nulls_first';
|
|
|
|
statement ok
|
|
CREATE TABLE integers AS SELECT * FROM (VALUES (1), (2), (3)) tbl(i);
|
|
|
|
statement ok
|
|
PRAGMA explain_output = OPTIMIZED_ONLY;
|
|
|
|
# statistics propagation in groups
|
|
# no null values
|
|
query II
|
|
EXPLAIN SELECT i IS NULL FROM (SELECT i FROM integers GROUP BY i) integers(i);
|
|
----
|
|
logical_opt <!REGEX>:.*IS_NULL.*
|
|
|
|
# i=4 is out of range [1,3]
|
|
query II
|
|
EXPLAIN SELECT i=4 FROM (SELECT i FROM integers GROUP BY i) integers(i);
|
|
----
|
|
logical_opt <!REGEX>:.*\(i = 4\).*
|
|
|
|
# i=3 is in range [1,3]
|
|
query II
|
|
EXPLAIN SELECT i=3 FROM (SELECT i FROM integers GROUP BY i) integers(i);
|
|
----
|
|
logical_opt <REGEX>:.*\(i = 3\).*
|
|
|
|
# count without null values
|
|
query I
|
|
SELECT COUNT(i) FROM integers;
|
|
----
|
|
3
|
|
|
|
query II
|
|
SELECT i, COUNT(i) FROM integers GROUP BY i ORDER BY i;
|
|
----
|
|
1 1
|
|
2 1
|
|
3 1
|
|
|
|
statement ok
|
|
INSERT INTO integers VALUES (NULL);
|
|
|
|
# count with null values
|
|
query I
|
|
SELECT COUNT(i) FROM integers;
|
|
----
|
|
3
|
|
|
|
query II
|
|
SELECT i, COUNT(i) FROM integers GROUP BY i ORDER BY i;
|
|
----
|
|
NULL 0
|
|
1 1
|
|
2 1
|
|
3 1
|
|
|
|
# sum
|
|
# sum that fits in int64
|
|
statement ok
|
|
CREATE TABLE bigints AS SELECT i::BIGINT as i FROM (VALUES (1), (2), (3)) tbl(i);
|
|
|
|
query I
|
|
SELECT SUM(i) FROM bigints;
|
|
----
|
|
6
|
|
|
|
# avg
|
|
query I
|
|
SELECT AVG(i) FROM bigints;
|
|
----
|
|
2
|
|
|
|
# sum no longer fits in int64
|
|
statement ok
|
|
INSERT INTO bigints VALUES (9223372036854775806);
|
|
|
|
query I
|
|
SELECT SUM(i) FROM bigints;
|
|
----
|
|
9223372036854775812
|
|
|
|
query I
|
|
SELECT AVG(i) FROM bigints;
|
|
----
|
|
2305843009213693952
|
|
|
|
statement ok
|
|
DROP TABLE bigints;
|
|
|
|
statement ok
|
|
CREATE TABLE bigints AS SELECT i::BIGINT as i FROM (VALUES (-1), (-2), (-3)) tbl(i);
|
|
|
|
query I
|
|
SELECT SUM(i) FROM bigints;
|
|
----
|
|
-6
|
|
|
|
# avg
|
|
query I
|
|
SELECT AVG(i) FROM bigints;
|
|
----
|
|
-2
|
|
|
|
# sum no longer fits in int64 [negative]
|
|
statement ok
|
|
INSERT INTO bigints VALUES (-9223372036854775806);
|
|
|
|
query I
|
|
SELECT SUM(i) FROM bigints;
|
|
----
|
|
-9223372036854775812
|
|
|
|
query I
|
|
SELECT AVG(i) FROM bigints;
|
|
----
|
|
-2305843009213693952
|
|
|
|
# now with decimals
|
|
# sum that fits in int64
|
|
statement ok
|
|
CREATE TABLE decimals AS SELECT i::DECIMAL(18,1) as i FROM (VALUES (1), (2), (3)) tbl(i);
|
|
|
|
query I
|
|
SELECT SUM(i) FROM decimals;
|
|
----
|
|
6.0
|
|
|
|
# avg
|
|
query I
|
|
SELECT AVG(i) FROM decimals;
|
|
----
|
|
2.0
|
|
|
|
# sum no longer fits in int64
|
|
statement ok
|
|
INSERT INTO decimals SELECT 99999999999999999.9 FROM repeat(1, 10)
|
|
|
|
query I
|
|
SELECT SUM(i) FROM decimals;
|
|
----
|
|
1000000000000000005.0
|
|
|
|
query I
|
|
SELECT AVG(i) FROM decimals;
|
|
----
|
|
76923076923076923
|