Postgres, объединить результат в одну строку, используя значения из столбца - PullRequest
2 голосов
/ 20 марта 2020

В Postgres,

Я пытаюсь объединить результаты из таблицы, которая выглядит следующим образом:

id    restaurant_id       title          category
-------------------------------------------------
1          2               pizza          main
2          2               pasta          main
3          2               coke           drink
4          2               beer           drink
5          2               fries          side
6          3               chips          side

Я хочу вернуть этот тип результата.

main                               drink                      side
--------------------------------------------------------------------------------------
[{id:1, title: pizza},...]        [{id:3, title: coke},...]   [{id:5, title: fries},...]

Мне нужно, чтобы результат был только одной строкой, так как это часть большого запроса. За последние пару дней я пробовал довольно много вещей с моим ограниченным знанием Postgres, но не смог приблизиться к тому, что мне нужно.

Некоторая помощь будет принята с благодарностью.

1 Ответ

2 голосов
/ 20 марта 2020

Вы можете использовать функции условного агрегирования и json:

select
    jsonb_agg(jsonb_build_object('id', id, 'title', title)) 
        filter(where category = 'main') main,
    jsonb_agg(jsonb_build_object('id', id, 'title', title)) 
        filter(where category = 'drink') drink,
    jsonb_agg(jsonb_build_object('id', id, 'title', title)) 
        filter(where category = 'side') side
from mytable

Демонстрация на DB Fiddle :

main                                                           | drink                                                        | side                                                          
:------------------------------------------------------------- | :----------------------------------------------------------- | :-------------------------------------------------------------
[{"id": "1", "title": "pizza"}, {"id": "2", "title": "pasta"}] | [{"id": "3", "title": "coke"}, {"id": "4", "title": "beer"}] | [{"id": "5", "title": "fries"}, {"id": "6", "title": "chips"}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...