вторая попытка ответить на этот вопрос более подробно. Я пытаюсь сгруппировать различные значения нескольких столбцов вместе для объектов с тем же именем. Я могу использовать GROUP_CONCAT для каждого из столбцов «Тип», но я не могу объединить их вместе, чтобы получить отдельный набор значений для каждого имени.
Вот пример моих данных:
+----------+-------+-------+-------+
| Company | Type1 | Type2 | Type3 |
+----------+-------+-------+-------+
| Generic | 1 | NULL | 3 |
+----------+-------+-------+-------+
| Generic | NULL | 2 | 2 |
+----------+-------+-------+-------+
| Generic | 3 | 2 | NULL |
+----------+-------+-------+-------+
| Generic2 | 1 | NULL | NULL |
+----------+-------+-------+-------+
| Generic2 | NULL | 2 | 2 |
+----------+-------+-------+-------+
| Generic2 | 1 | 2 | NULL |
+----------+-------+-------+-------+
И вот основной запрос, который я должен придумать, который НЕ работает так, как хотелось бы:
SELECT s.company, CONCAT(GROUP_CONCAT(DISTINCT s.type1),',',GROUP_CONCAT(DISTINCT s.type2),',',GROUP_CONCAT(DISTINCT s.type3)) AS GROUPED
FROM sample s
GROUP BY s.company
Приведенный выше запрос возвращает:
+----------+-----------+
| Company | GROUPED |
+----------+-----------+
| Generic | 1,3,2,3,2 |
+----------+-----------+
| Generic2 | 1,2,2 |
+----------+-----------+
Мне нужно, чтобы он возвращал группу групп только с разными значениями:
+----------+---------+
| Company | GROUPED |
+----------+---------+
| Generic | 1,2,3 |
+----------+---------+
| Generic2 | 1,2 |
+----------+---------+
Это возможно?
Один из вариантов — развернуть столбцы в строки перед группировкой. В MySQL вы можете сделать это с помощью
union all
:Демонстрация DB Fiddle:
Отличный совет, спасибо, я не думал об использовании UNION для всего, но он работает так, как я хотел. Очень признателен! — person Kevin O.; 22.06.2020