第二次尝试更详细地回答这个问题。我正在尝试为同名对象将多个列的不同值分组在一起。我可以在每个“type”列上使用group\u 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 |
+----------+---------+
这可能吗?
1条答案
按热度按时间vlju58qv1#
一种方法是在分组之前将列取消拆分为行。在mysql中,可以使用
union all
:db小提琴演示: