子集大表,用于多个UNION

时间:2019-07-19 13:04:18

标签: sql postgresql unpivot

假设我有一个具有以下结构的表:

[{"Parameter":"Pk","Count":99},{"Parameter": "sk", Count: 98},{"Parameter": "dk", Count: 97},{"Parameter": "rk", Count: 96},{"Parameter": "ck", Count: 95},{"Parameter": "mk", Count: 94}]

我想为每个ID创建下表(显示的是id measure_1_actual measure_1_predicted measure_2_actual measure_2_predicted 1 1 0 0 0 2 1 1 1 1 3 . . 0 0 的示例):

id = 1

这是我可以解决此问题的一种方法(我尚未测试过,但是希望您能理解一般的想法):

measure  actual   predicted
1        1        0
2        0        0

实际上,我有五个这样的“措施”,并且有成千上万的人-为每个成员分配如此大的表五次似乎不是最有效的方法。这是一个实时API,每分钟接收数十个请求,因此我认为我需要一种更好的方法。我的另一个想法是,一旦收到请求,就可能为每个成员创建一个临时表/视图,然后基于该子表创建UNION。

有人有更有效的方法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用横向连接:

select t.id, v.*
from t cross join lateral
     (values (1, measure_1_actual, measure_1_predicted),
             (2, measure_2_actual, measure_2_predicted)
     ) v(measure, actual, predicted);

横向联接在Postgres 9.4中引入。您可以在documentation中阅读它们。