Доброго времени суток. Нужна помощь с написанием запроса. Есть 2 таблицы:
people:
id(serial)|surname(character)|name(character)|second_name(character)|notes(text)
phones:
id(serial)|people_id(integer)|phone_number(character)
Нужно написать такой запрос:
Выбирает все записи из таблицы people, а в поле phones заносит все номера телефонов для записи.
Я пытался написать так:
SELECT people.*, array_agg(phones.phone_number) AS phones FROM people LEFT JOIN phones ON people.id = phones.people_id GROUP BY people.id
но мне выдаёт ошибку "column "people.surname" must appear in the GROUP BY clause or be used in an aggregate function". Я понимаю, что это означает, что в GROUP BY нужно прописать все поля таблицы people, но может есть какой-то другой способ?
Давайте будем логичными. Что
Давайте будем логичными. Что делает группировка GROUP BY? Она "схлопывает" записи с одинаковыми значениями полей, указанными в группировке. Если у вас, например, поле people.surname разное, то и группировать по нему не представляется возможным. Значит либо отказывайтесь от группировки и используйте вместо неё сортировку скажем по people_id чтобы было несколько записей с разными номерами, либо используйте группировку, но при этом перечисляйте в GROUP BY поля таблицы people, который вы хотите видеть.
Можно обойтись и без
Можно и без группировки:
PS в 9.1 работает и твой вариант, если конечно по колонке people.id есть ограничение уникальности.
Спасибо за помощь)
Спасибо за помощь)