@@ -1420,65 +1420,95 @@ select var(sq.column1), var_pop(sq.column1), stddev(sq.column1), stddev_pop(sq.c
142014202 1 1.414213562373 1
14211421
14221422
1423- # sum / count for all nulls
1424- statement ok
1425- create table the_nulls as values (null::bigint, 1), (null::bigint, 1), (null::bigint, 2);
14261423
1427- # counts should be zeros (even for nulls)
1428- query II
1429- SELECT count(column1), column2 from the_nulls group by column2 order by column2;
1424+ # aggregates on empty tables
1425+ statement ok
1426+ CREATE TABLE empty (column1 bigint, column2 int);
1427+
1428+ # no group by column
1429+ query IIRIIIII
1430+ SELECT
1431+ count(column1), -- counts should be zero, even for nulls
1432+ sum(column1), -- other aggregates should be null
1433+ avg(column1),
1434+ min(column1),
1435+ max(column1),
1436+ bit_and(column1),
1437+ bit_or(column1),
1438+ bit_xor(column1)
1439+ FROM empty
1440+ ----
1441+ 0 NULL NULL NULL NULL NULL NULL NULL
1442+
1443+ # Same query but with grouping (no groups, so no output)
1444+ query IIRIIIIII
1445+ SELECT
1446+ count(column1),
1447+ sum(column1),
1448+ avg(column1),
1449+ min(column1),
1450+ max(column1),
1451+ bit_and(column1),
1452+ bit_or(column1),
1453+ bit_xor(column1),
1454+ column2
1455+ FROM empty
1456+ GROUP BY column2
1457+ ORDER BY column2;
14301458----
1431- 0 1
1432- 0 2
14331459
1434- # sums should be null
1435- query II
1436- SELECT sum(column1), column2 from the_nulls group by column2 order by column2;
1437- ----
1438- NULL 1
1439- NULL 2
14401460
1441- # avg should be null
1442- query RI
1443- SELECT avg(column1), column2 from the_nulls group by column2 order by column2;
1444- ----
1445- NULL 1
1446- NULL 2
1447-
1448- # bit_and should be null
1449- query II
1450- SELECT bit_and(column1), column2 from the_nulls group by column2 order by column2;
1451- ----
1452- NULL 1
1453- NULL 2
1461+ statement ok
1462+ drop table empty
14541463
1455- # bit_or should be null
1456- query II
1457- SELECT bit_or(column1), column2 from the_nulls group by column2 order by column2;
1458- ----
1459- NULL 1
1460- NULL 2
1464+ # aggregates on all nulls
1465+ statement ok
1466+ CREATE TABLE the_nulls
1467+ AS VALUES
1468+ (null::bigint, 1),
1469+ (null::bigint, 1),
1470+ (null::bigint, 2);
14611471
1462- # bit_xor should be null
14631472query II
1464- SELECT bit_xor(column1), column2 from the_nulls group by column2 order by column2;
1473+ select * from the_nulls
14651474----
14661475NULL 1
1467- NULL 2
1468-
1469- # min should be null
1470- query II
1471- SELECT min(column1), column2 from the_nulls group by column2 order by column2;
1472- ----
14731476NULL 1
14741477NULL 2
14751478
1476- # max should be null
1477- query II
1478- SELECT max(column1), column2 from the_nulls group by column2 order by column2;
1479- ----
1480- NULL 1
1481- NULL 2
1479+ # no group by column
1480+ query IIRIIIII
1481+ SELECT
1482+ count(column1), -- counts should be zero, even for nulls
1483+ sum(column1), -- other aggregates should be null
1484+ avg(column1),
1485+ min(column1),
1486+ max(column1),
1487+ bit_and(column1),
1488+ bit_or(column1),
1489+ bit_xor(column1)
1490+ FROM the_nulls
1491+ ----
1492+ 0 NULL NULL NULL NULL NULL NULL NULL
1493+
1494+ # Same query but with grouping
1495+ query IIRIIIIII
1496+ SELECT
1497+ count(column1), -- counts should be zero, even for nulls
1498+ sum(column1), -- other aggregates should be null
1499+ avg(column1),
1500+ min(column1),
1501+ max(column1),
1502+ bit_and(column1),
1503+ bit_or(column1),
1504+ bit_xor(column1),
1505+ column2
1506+ FROM the_nulls
1507+ GROUP BY column2
1508+ ORDER BY column2;
1509+ ----
1510+ 0 NULL NULL NULL NULL NULL NULL NULL 1
1511+ 0 NULL NULL NULL NULL NULL NULL NULL 2
14821512
14831513
14841514statement ok
@@ -1489,29 +1519,49 @@ create table bit_aggregate_functions (
14891519 c1 SMALLINT NOT NULL,
14901520 c2 SMALLINT NOT NULL,
14911521 c3 SMALLINT,
1522+ tag varchar
14921523)
14931524as values
1494- (5, 10, 11),
1495- (33, 11, null),
1496- (9, 12, null);
1525+ (5, 10, 11, 'A'),
1526+ (33, 11, null, 'B'),
1527+ (9, 12, null, 'A');
1528+
1529+ # query_bit_and, query_bit_or, query_bit_xor
1530+ query IIIIIIIII
1531+ SELECT
1532+ bit_and(c1),
1533+ bit_and(c2),
1534+ bit_and(c3),
1535+ bit_or(c1),
1536+ bit_or(c2),
1537+ bit_or(c3),
1538+ bit_xor(c1),
1539+ bit_xor(c2),
1540+ bit_xor(c3)
1541+ FROM bit_aggregate_functions
1542+ ----
1543+ 1 8 11 45 15 11 45 13 11
1544+
1545+ # query_bit_and, query_bit_or, query_bit_xor, with group
1546+ query IIIIIIIIIT
1547+ SELECT
1548+ bit_and(c1),
1549+ bit_and(c2),
1550+ bit_and(c3),
1551+ bit_or(c1),
1552+ bit_or(c2),
1553+ bit_or(c3),
1554+ bit_xor(c1),
1555+ bit_xor(c2),
1556+ bit_xor(c3),
1557+ tag
1558+ FROM bit_aggregate_functions
1559+ GROUP BY tag
1560+ ORDER BY tag
1561+ ----
1562+ 1 8 11 13 14 11 12 6 11 A
1563+ 33 11 NULL 33 11 NULL 33 11 NULL B
14971564
1498- # query_bit_and
1499- query III
1500- SELECT bit_and(c1), bit_and(c2), bit_and(c3) FROM bit_aggregate_functions
1501- ----
1502- 1 8 11
1503-
1504- # query_bit_or
1505- query III
1506- SELECT bit_or(c1), bit_or(c2), bit_or(c3) FROM bit_aggregate_functions
1507- ----
1508- 45 15 11
1509-
1510- # query_bit_xor
1511- query III
1512- SELECT bit_xor(c1), bit_xor(c2), bit_xor(c3) FROM bit_aggregate_functions
1513- ----
1514- 45 13 11
15151565
15161566statement ok
15171567create table bool_aggregate_functions (
@@ -1883,69 +1933,101 @@ CREATE TABLE test_table (c1 INT, c2 INT, c3 INT)
18831933
18841934# Inserting data
18851935statement ok
1886- INSERT INTO test_table VALUES (1, 10, 50), (1, 20, 60), (2, 10, 70), (2, 20, 80), (3, 10, NULL)
1936+ INSERT INTO test_table VALUES
1937+ (1, 10, 50),
1938+ (1, 20, 60),
1939+ (2, 10, 70),
1940+ (2, 20, 80),
1941+ (3, 10, NULL)
18871942
18881943# query_group_by_with_filter
1889- query II rowsort
1890- SELECT c1, SUM(c2) FILTER (WHERE c2 >= 20) as result FROM test_table GROUP BY c1
1891- ----
1892- 1 20
1893- 2 20
1894- 3 NULL
1944+ query III rowsort
1945+ SELECT
1946+ c1,
1947+ SUM(c2) FILTER (WHERE c2 >= 20),
1948+ SUM(c2) FILTER (WHERE c2 < 1) -- no rows pass filter, so the output should be NULL
1949+ FROM test_table GROUP BY c1
1950+ ----
1951+ 1 20 NULL
1952+ 2 20 NULL
1953+ 3 NULL NULL
18951954
18961955# query_group_by_avg_with_filter
1897- query IR rowsort
1898- SELECT c1, AVG(c2) FILTER (WHERE c2 >= 20) AS avg_c2 FROM test_table GROUP BY c1
1899- ----
1900- 1 20
1901- 2 20
1902- 3 NULL
1956+ query IRR rowsort
1957+ SELECT
1958+ c1,
1959+ AVG(c2) FILTER (WHERE c2 >= 20),
1960+ AVG(c2) FILTER (WHERE c2 < 1) -- no rows pass filter, so output should be null
1961+ FROM test_table GROUP BY c1
1962+ ----
1963+ 1 20 NULL
1964+ 2 20 NULL
1965+ 3 NULL NULL
19031966
19041967# query_group_by_with_multiple_filters
19051968query IIR rowsort
1906- SELECT c1, SUM(c2) FILTER (WHERE c2 >= 20) AS sum_c2, AVG(c3) FILTER (WHERE c3 <= 70) AS avg_c3 FROM test_table GROUP BY c1
1969+ SELECT
1970+ c1,
1971+ SUM(c2) FILTER (WHERE c2 >= 20) AS sum_c2,
1972+ AVG(c3) FILTER (WHERE c3 <= 70) AS avg_c3
1973+ FROM test_table GROUP BY c1
19071974----
190819751 20 55
190919762 20 70
191019773 NULL NULL
19111978
19121979# query_group_by_distinct_with_filter
19131980query II rowsort
1914- SELECT c1, COUNT(DISTINCT c2) FILTER (WHERE c2 >= 20) AS distinct_c2_count FROM test_table GROUP BY c1
1981+ SELECT
1982+ c1,
1983+ COUNT(DISTINCT c2) FILTER (WHERE c2 >= 20) AS distinct_c2_count
1984+ FROM test_table GROUP BY c1
19151985----
191619861 1
191719872 1
191819883 0
19191989
19201990# query_without_group_by_with_filter
19211991query I rowsort
1922- SELECT SUM(c2) FILTER (WHERE c2 >= 20) AS sum_c2 FROM test_table
1992+ SELECT
1993+ SUM(c2) FILTER (WHERE c2 >= 20) AS sum_c2
1994+ FROM test_table
19231995----
1924199640
19251997
19261998# count_without_group_by_with_filter
19271999query I rowsort
1928- SELECT COUNT(c2) FILTER (WHERE c2 >= 20) AS count_c2 FROM test_table
2000+ SELECT
2001+ COUNT(c2) FILTER (WHERE c2 >= 20) AS count_c2
2002+ FROM test_table
19292003----
193020042
19312005
19322006# query_with_and_without_filter
19332007query III rowsort
1934- SELECT c1, SUM(c2) FILTER (WHERE c2 >= 20) as result, SUM(c2) as result_no_filter FROM test_table GROUP BY c1;
2008+ SELECT
2009+ c1,
2010+ SUM(c2) FILTER (WHERE c2 >= 20) as result,
2011+ SUM(c2) as result_no_filter
2012+ FROM test_table GROUP BY c1;
19352013----
193620141 20 30
193720152 20 30
193820163 NULL 10
19392017
19402018# query_filter_on_different_column_than_aggregate
19412019query I rowsort
1942- select sum(c1) FILTER (WHERE c2 < 30) from test_table;
2020+ select
2021+ sum(c1) FILTER (WHERE c2 < 30)
2022+ FROM test_table;
19432023----
194420249
19452025
19462026# query_test_empty_filter
19472027query I rowsort
1948- SELECT SUM(c2) FILTER (WHERE c2 >= 20000000) AS sum_c2 FROM test_table;
2028+ SELECT
2029+ SUM(c2) FILTER (WHERE c2 >= 20000000) AS sum_c2
2030+ FROM test_table;
19492031----
19502032NULL
19512033
0 commit comments