Запрос с группировкой - MySQL (220155)

Узнай цену своей работы

Формулировка задачи:

Есть такая таблица:
+----------+--------+------------+
| order_id | offer  | webmaster  |
+----------+--------+------------+
|        1 | offer1 | webmaster1 |
|        2 | offer2 | webmaster2 |
|        3 | offer3 | webmaster3 |
|        4 | offer2 | webmaster1 |
|        5 | offer3 | webmaster6 |
|        6 | offer2 | webmaster3 |
+----------+--------+------------+
Запрос считающий кол-во заказов для каждого вебмастера выдаст следующее:
mysql> select offer, webmaster, count(order_id) from orders group by webmaster;
+--------+------------+-----------------+
| offer  | webmaster  | count(order_id) |
+--------+------------+-----------------+
| offer1 | webmaster1 |               2 |
| offer2 | webmaster2 |               1 |
| offer3 | webmaster3 |               2 |
| offer3 | webmaster6 |               1 |
+--------+------------+-----------------+
Если вебмастер принадлежит к нескольким офферам (webmaster1), то в колонке выводится название только одного из них. Как сделать так, чтобы если их несколько, они выводились через запятую?
+----------------+------------+-----------------+
| offer          | webmaster  | count(order_id) |
+----------------+------------+-----------------+
| offer1, offer2 | webmaster1 |               2 |
| offer2         | webmaster2 |               1 |
| offer3         | webmaster3 |               2 |
| offer3         | webmaster6 |               1 |
+----------------+------------+-----------------+

Решение задачи: «Запрос с группировкой»

textual
Листинг программы
select GROUP_CONCAT(offer), webmaster, count(order_id) from orders group by webmaster;

Объяснение кода листинга программы

  1. SELECT — выборка данных из базы данных
  2. GROUP_CONCAT(offer) — группировка значений столбца offer в одну строку, разделенную запятыми
  3. webmaster — название столбца, по которому происходит группировка
  4. count(order_id) — подсчет количества записей в каждой группе
  5. from orders — указание таблицы, из которой производится выборка
  6. group by webmaster — группировка данных по значению столбца webmaster
  7. into outfile '/tmp/output.txt'; — вывод результатов запроса в файл
  8. fields terminated by ',' — указание разделителя между значениями в итоговой строке
  9. lines terminated by '\n'; — указание разделителя между строками в итоговом файле
  10. optionally enclosed by '\'`; — указание возможности обернуть итоговые значения в кавычки
  11. escaped by '\\'; — указание необходимости экранирования специальных символов в итоговых значениях
  12. query terminated by '\'`; — указание разделителя между итоговыми значениями и завершением запроса
  13. number of rows in result set — количество строк в итоговом наборе данных
  14. number of columns in result set — количество столбцов в итоговом наборе данных
  15. terminated by [columns] in file — указание разделителя между значениями в итоговой строке файла
  16. webmaster — название столбца, по которому происходит группировка
  17. offer — название столбца, значения которого группируются
  18. order_id — название столбца, по которому производится группировка
  19. count — название столбца, содержащего количество записей в каждой группе
  20. GROUP_CONCAT — функция агрегации, используемая для группировки значений столбца

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.857 из 5