具有 metric_name 和 metric_value 列的表的名称

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)

转置表更适用于收集的指标数量频繁变化的某些用例。

在转置表中是否有类似结构的表的标准名称?

Eva*_*oll 7

逆透视表

作为转换的产物,这里您想要的形式称为“ 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)

也可以看看,