Postgres-旋转许多行-性能

时间:2018-07-05 15:19:17

标签: sql postgresql

我有一张这样的桌子:

create table myschema.mytable
(
    zone varchar(50),
    description varchar(50),
    amount double precision
);

我执行这样的插入(不是实际的查询,只是为了理解数据):

insert into myschema.mytable (zone, description, amount) 
values
  ('South', 'A1', 40),
  ('North', 'A1', 50),
  ....
  ('South', 'A2', 10),
  ('North', 'A2', 20),
  ('West', 'A2', 5);

我总共在该表(和4个区域)中拥有500条记录;如何执行“枢轴”查询以获得类似的内容?

A1  A2  A3 .... Zone
---------------------
40  10   2      South
50  20   1      North
 0   5   3      West

我这里的主要问题是性能...我试图为每个“类别”进行一系列的左联接,但在性能方面却需要很多空间

1 个答案:

答案 0 :(得分:0)

您可以改为进行条件聚集

select zone, 
       sum(case when descr = 'A1' then amt else 0 end),
       sum(case when descr = 'A2' then amt else 0 end),
       sum(case when descr = 'A3' then amt else 0 end),
       . . .
from mytable t
group by zone;