Postgres - поворот ряда строк - производительность - PullRequest
0 голосов
/ 05 июля 2018

У меня есть такая таблица:

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);

Всего у меня около 500 записей в этой таблице (и 4 зоны); Как я могу выполнить запрос 'Pivot', чтобы получить что-то вроде этого?

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

Моя главная проблема здесь - это производительность ... Я пытался выполнить серию левых объединений для каждой категории, но с точки зрения производительности это занимает много места

1 Ответ

0 голосов
/ 05 июля 2018

Вы можете сделать условное агрегирование вместо:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...