假设我有一个具有以下结构的表:
[{"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。
有人有更有效的方法吗?
答案 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中阅读它们。