digoal
2023-09-28
PostgreSQL , PolarDB , duckdb , 语法糖
duckdb增加了很多SQL语法糖, 目标是要让用户可以随心所欲的写SQL.
https://duckdb.org/2023/08/23/even-friendlier-sql.html
Dynamic PIVOT and UNPIVOT 动态行列转换
测试数据如下
CREATE TABLE purchases (item VARCHAR, year INT, count INT);
INSERT INTO purchases
VALUES ('phasers', 2155, 1035), ('phasers', 2156, 25039), ('phasers', 2157, 95000),
('photon torpedoes', 2155, 255), ('photon torpedoes', 2156, 17899), ('photon torpedoes', 2157, 87492);
FROM purchases;
item | year | count |
---|---|---|
phasers | 2155 | 1035 |
phasers | 2156 | 25039 |
phasers | 2157 | 95000 |
photon torpedoes | 2155 | 255 |
photon torpedoes | 2156 | 17899 |
photon torpedoes | 2157 | 87492 |
行转列
CREATE TABLE pivoted_purchases AS
PIVOT purchases
ON year
USING SUM(count)
GROUP BY item;
FROM pivoted_purchases;
item | 2155 | 2156 | 2157 |
---|---|---|---|
phasers | 1035 | 25039 | 95000 |
photon torpedoes | 255 | 17899 | 87492 |
列转行
UNPIVOT pivoted_purchases
ON COLUMNS(* EXCLUDE item)
INTO
NAME year
VALUE count;
item | year | count |
---|---|---|
phasers | 2155 | 1035 |
phasers | 2156 | 25039 |
phasers | 2157 | 95000 |
photon torpedoes | 2155 | 255 |
photon torpedoes | 2156 | 17899 |
photon torpedoes | 2157 | 87492 |