MySQL聚合列作为一组不同的值

Posted

技术标签:

【中文标题】MySQL聚合列作为一组不同的值【英文标题】:MySQL aggregate column as set of distinct values 【发布时间】:2021-07-12 05:34:51 【问题描述】:

我想将一列聚合为一组值。

让我们考虑以下架构

A, B, C
'a', 'b', 'c'
'a', 'b', 'd'
'a', 'c', 'd'
'b', 'a', 'c'
'b', 'd', 'a'

我需要这样的结果

A, B, C
'a', ['b', 'c'], ['c', 'd']
'b', ['a', 'd'], ['c', 'a']

我尝试搜索集合聚合函数,但找不到任何有用的东西。

【问题讨论】:

【参考方案1】:

您可以group by A 和使用GROUP_CONCAT() 收集不同的Bs 和Cs:

SELECT A,
       CONCAT('[', GROUP_CONCAT(DISTINCT B SEPARATOR ', '), ']') B,
       CONCAT('[', GROUP_CONCAT(DISTINCT C SEPARATOR ', '), ']') C
FROM tablename
GROUP BY A 

请参阅demo。

【讨论】:

以上是关于MySQL聚合列作为一组不同的值的主要内容,如果未能解决你的问题,请参考以下文章

如何在不同条件下聚合两个不同列中的值?

聚合后如何有条件地对来自不同列的值求和?

Python:分组后的索引不正确,具有不同的聚合到一组列

对跨标准和变体类型列的查询执行聚合函数

MYSQL查询--聚合函数查询

SQL Server聚合函数与聚合开窗函数