fr0zen
@fr0zen

Как сгруппировать записи в Postgres?

Есть пример
sqlfiddle.com/#!15/c2f3f/18
Как доработать запрос, чтоб осталось 3 записи, по 1 на каждую запись из таблицы1, чтоб в поле skills был массив соответсвующих значений из таблицы2, то есть:
1 asya [ burn, eat ]
2 petya [ code ]
3 lena [ cook, clean ]
  • Вопрос задан
  • 1152 просмотра
Решения вопроса 1
qonand
@qonand
Software Engineer
используйте функцию array_agg, например:
SELECT table1 .id, table1 .name, array_agg(table2.skills)
FROM table1 
LEFT JOIN table2 ON table2.id = table1.id
GROUP BY table1.id
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
sergey-gornostaev
@sergey-gornostaev Куратор тега PostgreSQL
Седой и строгий
Во-первых, вам не нужен union, используйте join. Во-вторых, группировка делается с помощью group by. Для получения массива сгруппированных значений используйте агрегатную функцию array_agg().
select
  t1.name, array_agg(t2.skills)
from table1 as t1
inner join table2 as t2
  using (id)
group by t1.name;

sqlfidle
Ответ написан
Комментировать
@zzzevaka
SELECT id, name, array_agg(skills)
FROM table1 JOIN table2 USING (id)
GROUP BY 1,2
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы