@stdio96

Как в SQL сгруппировать по 1 параметру, а второй получить в виде массива/строки?

Здравствуйте.

Есть таблица вида:
Город | Товар | Поставщик
Город | Товар | Поставщик
Город | Товар | Поставщик
Город | Товар | Поставщик

Таблица всего 1. Связей не надо делать. Сейчас я использую такой запрос для того, чтобы получить количество товара в каждом городе:
SELECT *, COUNT(`city`) AS count FROM `ctable` GROUP BY `city`, `vendor`


Запрос выдает список городов - количество товара - поставщика (в таком случае я получаю 1 и тот же город несколько раз из-за того, что поставщиков у товара может быть несколько), но мне надо, чтобы запрос суммировал количество товара в городе, а поставщиков указывал через запятую (или другой знак, не важно).

Как сейчас:
Москва - 25 - vendor1
Москва - 15 - vendor2
Москва - 10 - vendor3

Как надо:
Москва - 50 - vendor1, vendor2, vendor3


P.S.: не ищите смысл в задании. Интересует, как сделать такой запрос.

Спасибо.
  • Вопрос задан
  • 869 просмотров
Решения вопроса 1
Shark13
@Shark13
SELECT city, COUNT(city) AS count, string_agg(vendor, ',') FROM ctable GROUP BY city


https://docs.microsoft.com/en-us/sql/t-sql/functio...
https://www.postgresql.org/docs/9.5/functions-aggr...

Возможно нужно использовать GROUP_CONCAT, зависит от БД
SELECT city, COUNT(city) AS count, GROUP_CONCAT(vendor) FROM ctable GROUP BY city

www.sqlines.com/mysql/functions/group_concat
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
GROUP_CONCAT()
Ответ написан
Комментировать
kawabanga
@kawabanga
SELECT *, COUNT(`city`) AS count, sum('price'), GROUP_CONCAT(`vendor`) FROM `ctable` GROUP BY `city`, `vendor`

webi.ru/webi_articles/8_14_f.html
Ответ написан
Комментировать
tsklab
@tsklab
Здесь отвечаю на вопросы.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы