我有以下表格:

Teammate ID Teammate name Team id Teams
1 Amy 11 Sales
1 Amy 12 Support
1 Amy 13 Marketing
2 Peter 12 Support
2 Peter 13 Marketing

我想按队友ID或队友姓名对我的结果进行分组,以便团队列显示在一行中,如下所示:

Teammate ID Teammate name Team id Teams
1 Amy 11, 12, 13 Sales, Support, Marketing
2 Peter 12, 13 Support, Marketing

哪种功能最适合用于此目的?我try 了子查询、合并、一些奇怪的XML路径之类的东西,但作为一个新的SQL用户,我不能理解这一点

我给出结果的原始查询是;

   SELECT
    tm.teammate_id AS "Teammate ID",
    tm.name AS "Teammate name",
    
    itt.team_id AS "Team IDs",
    
    it.team AS "Teams"
    
    
FROM
    intercom_teammates AS tm

LEFT JOIN intercom_teammate_teams AS itt 
ON tm.teammate_id = itt.teammate_id

LEFT JOIN intercom_teams AS it 
ON tm.teammate_id = itt.teammate_id

推荐答案

一个简单的GROUP_CONCAT就可以做到这一点:

select it.TeammateID,
       group_concat( distinct it.Teammatename SEPARATOR ',') as Teammatename,
       group_concat( it.Teamid SEPARATOR ',') as Teamid,
       group_concat( it.Teams SEPARATOR ',') as Teams
from intercom_teammates it
group by it.TeammateID ;

https://dbfiddle.uk/rU8-h8rX

Note.我在Teammatename上使用了DISTINCT,但我认为它是多余的,如果对于每个不同的TeammateID,Teammatename是唯一的,则可以删除它.

Mysql相关问答推荐

SQL/Pyspark -判断条件

为什么我的带有索引字段和非索引字段的 Select 有时需要很长时间

数组上的MySQL、JSON_CONTAINS用法

计算符合字段值只能包含一种事件类型这一事实的记录

列出每年最多产的三位作家

如何进行查询以在两个不同的列中搜索两个不同的数据字符串?

如何使用等于、喜欢和不等于在 json 字段上编写查询?

使用sql查找源和最终目的地

MySQL,递归 CTE.它如何以这种句法形式工作?

从三个不同的表中生成两列,并使用分组变量计算这些列的比率

MySQL 查询组按日期(12 小时间隔)

mysql 5.5;可以从记录中排除表吗?

判断一对记录是否属于多个组ID

如何在 MySQL 中删除具有 2 列作为复合主键的多行?

如何在 MySQL 中为用户设置默认架构

MySQL 实用程序 - ~/.my.cnf 选项文件

MySQL与空值比较

考虑到 NodeJS,MySQL 和 MySQL2 有什么区别

MySQL:切换 int 字段值的简单方法

"SELECT COUNT(*)" 很慢,即使有 where 子句