@@ -1420,65 +1420,95 @@ select var(sq.column1), var_pop(sq.column1), stddev(sq.column1), stddev_pop(sq.c
1420
1420
2 1 1.414213562373 1
1421
1421
1422
1422
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);
1426
1423
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;
1430
1458
----
1431
- 0 1
1432
- 0 2
1433
1459
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
1440
1460
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
1454
1463
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);
1461
1471
1462
- # bit_xor should be null
1463
1472
query II
1464
- SELECT bit_xor(column1), column2 from the_nulls group by column2 order by column2;
1473
+ select * from the_nulls
1465
1474
----
1466
1475
NULL 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
- ----
1473
1476
NULL 1
1474
1477
NULL 2
1475
1478
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
1482
1512
1483
1513
1484
1514
statement ok
@@ -1489,29 +1519,49 @@ create table bit_aggregate_functions (
1489
1519
c1 SMALLINT NOT NULL,
1490
1520
c2 SMALLINT NOT NULL,
1491
1521
c3 SMALLINT,
1522
+ tag varchar
1492
1523
)
1493
1524
as 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
1497
1564
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
1515
1565
1516
1566
statement ok
1517
1567
create table bool_aggregate_functions (
@@ -1883,69 +1933,101 @@ CREATE TABLE test_table (c1 INT, c2 INT, c3 INT)
1883
1933
1884
1934
# Inserting data
1885
1935
statement 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)
1887
1942
1888
1943
# 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
1895
1954
1896
1955
# 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
1903
1966
1904
1967
# query_group_by_with_multiple_filters
1905
1968
query 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
1907
1974
----
1908
1975
1 20 55
1909
1976
2 20 70
1910
1977
3 NULL NULL
1911
1978
1912
1979
# query_group_by_distinct_with_filter
1913
1980
query 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
1915
1985
----
1916
1986
1 1
1917
1987
2 1
1918
1988
3 0
1919
1989
1920
1990
# query_without_group_by_with_filter
1921
1991
query 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
1923
1995
----
1924
1996
40
1925
1997
1926
1998
# count_without_group_by_with_filter
1927
1999
query 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
1929
2003
----
1930
2004
2
1931
2005
1932
2006
# query_with_and_without_filter
1933
2007
query 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;
1935
2013
----
1936
2014
1 20 30
1937
2015
2 20 30
1938
2016
3 NULL 10
1939
2017
1940
2018
# query_filter_on_different_column_than_aggregate
1941
2019
query 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;
1943
2023
----
1944
2024
9
1945
2025
1946
2026
# query_test_empty_filter
1947
2027
query 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;
1949
2031
----
1950
2032
NULL
1951
2033
0 commit comments