仅将具有不同值的多个 GROUP_CONCAT() 的结果组合在一起

Posted

技术标签:

【中文标题】仅将具有不同值的多个 GROUP_CONCAT() 的结果组合在一起【英文标题】:Grouping together results of multiple GROUP_CONCAT() with distinct values only 【发布时间】:2020-10-09 23:20:07 【问题描述】:

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

这可能吗?

【问题讨论】:

【参考方案1】:

一种选择是在分组之前将列取消透视到行。在 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

Demo on DB Fiddle

公司|资源 :------- | :---- 通用 | 1,2,3 通用2 | 1,2

【讨论】:

很好的建议,谢谢,我没有考虑过对所有事情都使用 UNION,但它可以按我的意愿工作。非常感谢!

以上是关于仅将具有不同值的多个 GROUP_CONCAT() 的结果组合在一起的主要内容,如果未能解决你的问题,请参考以下文章

如何仅将具有不同属性的对象添加到核心数据到多关系 NSSet

MySQL group_concat 与连接

在 MySQL 中具有多个连接的 group_concat

使用 MySQL 在不同字段上的多个 GROUP_CONCAT

具有 MagicalRecord 的多个数据库或仅将部分数据库同步到 iCloud

使用循环在 ggplot 中创建具有不同 Y 轴值的多个图