仅将具有不同值的多个 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