Как преобразовать таблицу с помощью postgresql - PullRequest
0 голосов
/ 03 января 2019

Я хочу выбрать эти поля из БД:

order_id | item1_category | item2_category | item3_category
1        | book           | food           | drink

но все, что у меня есть, это как:

order_id | item_category
1        | book
1        | food
1        | drink

Как я могу превратить свой стол в то, что мне нужно? Спасибо

1 Ответ

0 голосов
/ 03 января 2019

Один метод условного агрегирования:

select order_id,
       max(item_category) filter (where seqnum = 1) as item_category_1,
       max(item_category) filter (where seqnum = 2) as item_category_2,
       max(item_category) filter (where seqnum = 3) as item_category_3
from (select t.*,
             row_number() over (partition by order_id order by item_category) as seqnum
      from t
     ) t
group by order_id;

Другое использование array_agg():

select order_id,
       (array_agg(item_category order by item_category))[1] as item_category_1,
       (array_agg(item_category order by item_category))[2] as item_category_2,
       (array_agg(item_category order by item_category))[3] as item_category_3
from t
group by order_id;
...