use*_*038 2 database-design terminology pivot unpivot
典型的数据库表可能如下所示:
date-------geography---clicks---cost---conversions
___________________________________________________
1/1/2010---Kansas------56-------12-----1
Run Code Online (Sandbox Code Playgroud)
转换后,它看起来像这样。
date-----geography---metric_name---metric_value
____________________________________________
1/1/2010-Kansas------clicks--------56
1/1/2010-Kansas------cost----------12
1/1/2010-Kansas------conversions---1
Run Code Online (Sandbox Code Playgroud)
转置表更适用于收集的指标数量频繁变化的某些用例。
在转置表中是否有类似结构的表的标准名称?
作为转换的产物,这里您想要的形式称为“ Unpivot table ”。您从这里开始的形式要么是规范化数据,要么是称为“枢轴”的转换本身的结果。
您可以旋转和取消旋转而不会丢失数据。像这样的旋转和操作来自OLAP 功能,它们是旋转。在 PostgreSQL 中,我们以tablefunc模块为中心。我们可以轻松地使用列表中的a进行逆透视,CROSS JOIN LATERALVALUES
SELECT id, cat, value
FROM ( VALUES (1,1,2,3), (2,10,20,30) ) AS t1(id,x,y,z)
CROSS JOIN LATERAL ( VALUES ('X',x), ('Y',y), ('Z',z) )
AS t2(cat, value);
Run Code Online (Sandbox Code Playgroud)
或者,虽然速度较慢,但我们使用unnest(ARRAY[])惯用语和并行 unnest
SELECT id, cat, value
FROM ( VALUES (1,1,2,3), (2,10,20,30) ) AS t1(id,x,y,z)
CROSS JOIN LATERAL unnest(ARRAY['X','Y','Z'], ARRAY[x,y,z])
AS t2(cat, value);
Run Code Online (Sandbox Code Playgroud)
无论哪种方式,你都会生产,
id | cat | value
----+-----+-------
1 | X | 1
1 | Y | 2
1 | Z | 3
2 | X | 10
2 | Y | 20
2 | Z | 30
(6 rows)
Run Code Online (Sandbox Code Playgroud)
也可以看看,