仅使用不同值将多个group_concat()的结果分组在一起

uubf1zoe  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(400)

第二次尝试更详细地回答这个问题。我正在尝试为同名对象将多个列的不同值分组在一起。我可以在每个“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     |
+----------+---------+

这可能吗?

vlju58qv

vlju58qv1#

一种方法是在分组之前将列取消拆分为行。在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小提琴演示:

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

相关问题