Группировка результатов нескольких GROUP_CONCAT() только с различными значениями

вторая попытка ответить на этот вопрос более подробно. Я пытаюсь сгруппировать различные значения нескольких столбцов вместе для объектов с тем же именем. Я могу использовать 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     |
+----------+---------+

Это возможно?

См. также:  Не удается подключиться к localhost с помощью cURL в командной строке
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. Kevin O.

    Один из вариантов — развернуть столбцы в строки перед группировкой. В MySQL вы можете сделать это с помощью union all:

    select company, group_concat(distinct typex order by typex) res
    from (
        select company, type1 typex from mytable
        union all select company, type2 from mytable
        union all select company, type3 from mytable
    ) t
    group by company
    

    Демонстрация DB Fiddle:

    company  | res  
    :------- | :----
    Generic  | 1,2,3
    Generic2 | 1,2  
    

    Отличный совет, спасибо, я не думал об использовании UNION для всего, но он работает так, как я хотел. Очень признателен! person Kevin O.; 22.06.2020

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: