从PostgreSQL中的多个查询结果创建计算的数据透视表

时间:2018-08-19 08:55:55

标签: postgresql pivot

我对如何根据PostgreSQL上的几个查询结果制作计算的数据透视表有疑问。我设法取得了三个查询结果,但不知道如何将所有数据组合并计算到一个表中。我尝试用Google搜索它,但发现大部分问题都与如何从单个表中创建数据透视表有关,我可以使用sumcase和{ {1}}。好吧,这是我查询结果的简化版本

来自查询1的查询,其中包含总价值 group by

查询2的结果,其中包含正调整 | city | code | gross | |-------|------|--------| | city1 | 21 | 194793 | | city1 | 25 | 139241 | | city1 | 28 | 231365 | | city2 | 21 | 282025 | | city2 | 25 | 334458 | | city2 | 28 | 410852 | | city3 | 21 | 109237 |

查询3的结果,其中包含负调整 | city | code | adj_pos | |-------|------|---------| | city1 | 21 | 16259 | | city1 | 25 | 13634 | | city1 | 28 | 45854 | | city2 | 25 | 18060 | | city2 | 28 | 18220 |

想要要做的是创建这样的内容 | city | code | adj_neg | |-------|------|---------| | city1 | 25 | 23364 | | city2 | 21 | 27478 | | city2 | 25 | 23474 | 或者可能是来自总+正调整的最终计算- 每个城市对每个代码的负面调整是这样的 | city | 21_gross | 25_gross | 28_gross | 21_pos | 25_pos | 28_pos | 21_neg | 25_neg | 28_neg | |-------|----------|----------|----------|--------|--------|--------|--------|--------|--------| | city1 | 194793 | 139241 | 231365 | 16259 | 13634 | 45854 | | 23364 | | | city2 | 282025 | 334458 | 410852 | | 18060 | 18220 | 27478 | 23474 | | | city3 | 109237 | | | | | | | | | 任何建议将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

我认为您可以实现的最好办法是将枢轴部分作为JSON-http://sqlfiddle.com/#!17/b7d64/23

select 
  city,
  json_object_agg(
    code,
    coalesce(gross,0) + coalesce(adj_pos,0) - coalesce(adj_neg,0)
  ) as js
from q1
  left join q2 using (city,code)
  left join q3 using (city,code)
group by city