112 lines
2.7 KiB
SQL
112 lines
2.7 KiB
SQL
# name: test/sql/pivot/pivot_expressions.test
|
|
# description: Test SQL pivot expressions
|
|
# group: [pivot]
|
|
|
|
statement ok
|
|
PRAGMA enable_verification
|
|
|
|
statement ok
|
|
CREATE TABLE Cities(Country VARCHAR, Name VARCHAR, Year INT, Population INT);
|
|
|
|
statement ok
|
|
INSERT INTO Cities VALUES ('NL', 'Amsterdam', 2000, 1005);
|
|
|
|
statement ok
|
|
INSERT INTO Cities VALUES ('NL', 'Amsterdam', 2010, 1065);
|
|
|
|
statement ok
|
|
INSERT INTO Cities VALUES ('NL', 'Amsterdam', 2020, 1158);
|
|
|
|
statement ok
|
|
INSERT INTO Cities VALUES ('US', 'Seattle', 2000, 564);
|
|
|
|
statement ok
|
|
INSERT INTO Cities VALUES ('US', 'Seattle', 2010, 608);
|
|
|
|
statement ok
|
|
INSERT INTO Cities VALUES ('US', 'Seattle', 2020, 738);
|
|
|
|
statement ok
|
|
INSERT INTO Cities VALUES ('US', 'New York City', 2000, 8015);
|
|
|
|
statement ok
|
|
INSERT INTO Cities VALUES ('US', 'New York City', 2010, 8175);
|
|
|
|
statement ok
|
|
INSERT INTO Cities VALUES ('US', 'New York City', 2020, 8772);
|
|
|
|
query IIII rowsort
|
|
PIVOT Cities ON Country || '_' || Name USING SUM(Population) GROUP BY Year;
|
|
----
|
|
2000 1005 8015 564
|
|
2010 1065 8175 608
|
|
2020 1158 8772 738
|
|
|
|
query II rowsort
|
|
PIVOT Cities ON (CASE WHEN Country='NL' THEN NULL ELSE Country END) USING SUM(Population) GROUP BY Year;
|
|
----
|
|
2000 8579
|
|
2010 8783
|
|
2020 9510
|
|
|
|
# we allow expressions in the aggregate as well
|
|
query IIII rowsort
|
|
PIVOT Cities ON Country || '_' || Name USING COALESCE(SUM(Population), 0) GROUP BY Year;
|
|
----
|
|
2000 1005 8015 564
|
|
2010 1065 8175 608
|
|
2020 1158 8772 738
|
|
|
|
# casts
|
|
query IIII rowsort
|
|
PIVOT Cities ON Country || '_' || Name USING SUM(Population)::VARCHAR GROUP BY Year;
|
|
----
|
|
2000 1005 8015 564
|
|
2010 1065 8175 608
|
|
2020 1158 8772 738
|
|
|
|
# functions
|
|
query IIII rowsort
|
|
PIVOT Cities ON Country || '_' || Name USING SUM(Population) + 42 GROUP BY Year;
|
|
----
|
|
2000 1047 8057 606
|
|
2010 1107 8217 650
|
|
2020 1200 8814 780
|
|
|
|
# we cannot have multiple aggregates
|
|
statement error
|
|
PIVOT Cities ON Country || '_' || Name USING SUM(Population) + COUNT(*) GROUP BY Year;
|
|
----
|
|
Pivot expression must contain exactly one aggregate
|
|
|
|
# columns can only be referenced within the aggregate
|
|
statement error
|
|
PIVOT Cities ON Country || '_' || Name USING SUM(Population) + Population GROUP BY Year;
|
|
----
|
|
Columns can only be referenced within the aggregate of a PIVOT expression
|
|
|
|
statement error
|
|
PIVOT Cities ON min(Country) over () USING SUM(Population) GROUP BY Year;
|
|
----
|
|
cannot contain window functions
|
|
|
|
statement error
|
|
PIVOT Cities ON min(Country) USING SUM(Population) GROUP BY Year;
|
|
----
|
|
cannot contain aggregates
|
|
|
|
statement error
|
|
PIVOT Cities ON NULL USING SUM(Population) GROUP BY Year;
|
|
----
|
|
Cannot pivot on constant value
|
|
|
|
statement error
|
|
PIVOT Cities ON 'hello world' USING SUM(Population) GROUP BY Year;
|
|
----
|
|
Cannot pivot on constant value
|
|
|
|
statement error
|
|
PIVOT Cities ON (SELECT COUNTRY) USING SUM(Population) GROUP BY Year;
|
|
----
|
|
Cannot pivot on subquery
|