Files
email-tracker/external/duckdb/test/sql/pivot/pivot_example.test_slow
2025-10-24 19:21:19 -05:00

207 lines
4.7 KiB
Plaintext

# name: test/sql/pivot/pivot_example.test_slow
# description: Test SQL pivot examples for documentation
# 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);
statement ok
SET pivot_filter_threshold=99
loop i 0 2
statement ok
PIVOT Cities ON Country, Name IN ('xx') USING SUM(Population);
query IIIII rowsort
PIVOT Cities ON Year USING SUM(Population);
----
NL Amsterdam 1005 1065 1158
US New York City 8015 8175 8772
US Seattle 564 608 738
query IIIII rowsort
SELECT Country, Name, "2000_total_pop", "2010_total_pop", "2020_total_pop" FROM (PIVOT Cities ON Year USING SUM(Population) as total_pop)
----
NL Amsterdam 1005 1065 1158
US New York City 8015 8175 8772
US Seattle 564 608 738
query IIIII rowsort
PIVOT_WIDER Cities ON Year USING SUM(Population);
----
NL Amsterdam 1005 1065 1158
US New York City 8015 8175 8772
US Seattle 564 608 738
# sql syntax
query IIIII rowsort
FROM Cities PIVOT (SUM(Population) FOR Year IN (2000, 2010, 2020));
----
NL Amsterdam 1005 1065 1158
US New York City 8015 8175 8772
US Seattle 564 608 738
query IIII rowsort
PIVOT Cities ON Year IN (2000, 2020) USING SUM(Population);
----
NL Amsterdam 1005 1158
US New York City 8015 8772
US Seattle 564 738
query IIII rowsort
PIVOT Cities ON Year USING SUM(Population) GROUP BY Country;
----
NL 1005 1065 1158
US 8579 8783 9510
# use pivots in a set operation
statement ok
PIVOT Cities ON Year USING SUM(Population)
UNION ALL BY NAME
PIVOT Cities ON Name USING SUM(Population);
# join on pivots
query IIIIIII rowsort
FROM
(PIVOT Cities ON Year USING SUM(Population) GROUP BY Country)
JOIN
(PIVOT Cities ON Name USING SUM(Population) GROUP BY Country)
USING (Country)
----
NL 1005 1065 1158 3228 NULL NULL
US 8579 8783 9510 NULL 24962 1910
query II rowsort
PIVOT Cities ON (Country, Name) IN ('xx') USING SUM(Population);
----
2000 NULL
2010 NULL
2020 NULL
query IIIIIII rowsort
PIVOT (SELECT Country, Population, Year FROM Cities) ON Year USING SUM(Population) as sum_pop, count(population) as count_pop,;
----
NL 1005 1 1065 1 1158 1
US 8579 2 8783 2 9510 2
# multiple pivots
query IIIIIII rowsort
PIVOT Cities ON Year USING SUM(Population) as sum_pop, count(population) as count_pop, GROUP BY Country;
----
NL 1005 1 1065 1 1158 1
US 8579 2 8783 2 9510 2
query IIIIIII rowsort
PIVOT Cities ON Year USING SUM(Population), count(population) GROUP BY Country;
----
NL 1005 1 1065 1 1158 1
US 8579 2 8783 2 9510 2
# pivot order by/limit
query IIII
PIVOT Cities ON Year USING SUM(Population) GROUP BY country ORDER BY country desc
----
US 8579 8783 9510
NL 1005 1065 1158
query IIII
PIVOT Cities ON Year USING SUM(Population) GROUP BY country ORDER BY country desc LIMIT 1
----
US 8579 8783 9510
query IIII
PIVOT Cities ON Year USING SUM(Population) GROUP BY country ORDER BY country LIMIT 1
----
NL 1005 1065 1158
query IIII
PIVOT Cities ON Year USING SUM(Population) GROUP BY country ORDER BY country LIMIT 1 OFFSET 1
----
US 8579 8783 9510
query IIII
PIVOT Cities ON Year USING SUM(Population) GROUP BY country ORDER BY ALL
----
NL 1005 1065 1158
US 8579 8783 9510
statement ok
SET pivot_filter_threshold=0
endloop
# unpivot
statement ok
CREATE TABLE PivotedCities AS PIVOT Cities ON Year USING SUM(Population);
query IIII nosort unpivot
UNPIVOT PivotedCities ON 2000, 2010, 2020 INTO NAME Year VALUE Population;
----
query IIII nosort unpivot
FROM PivotedCities UNPIVOT(Population FOR Year IN (2000, 2010, 2020));
----
query IIII nosort unpivot
UNPIVOT PivotedCities ON 2000, 2010, 2020;
----
query IIII nosort unpivot
UNPIVOT PivotedCities ON COLUMNS('\d+');
----
query IIII nosort unpivot
UNPIVOT PivotedCities ON * EXCLUDE (Country, Name)
----
query IIII nosort unpivot
PIVOT_LONGER PivotedCities ON 2000, 2010, 2020;
# unpivot order by/limit
query IIII
UNPIVOT PivotedCities ON 2000, 2010, 2020 ORDER BY ALL DESC LIMIT 1
----
US Seattle 2020 738
query IIII
UNPIVOT PivotedCities ON 2000, 2010, 2020 ORDER BY ALL LIMIT 1
----
NL Amsterdam 2000 1005
query IIII
UNPIVOT PivotedCities ON 2000, 2010, 2020 ORDER BY 1, 3 LIMIT 1 OFFSET 1
----
NL Amsterdam 2010 1065