mysql 如何通过sql中其他列的值将结果列中的不同值带入单行

xqnpmsa8  于 2022-10-31  发布在  Mysql
关注(0)|答案(2)|浏览(144)

我有以下表格:
| 队友ID|队友姓名|团队ID|团队|
| - -|- -|- -|- -|
| 一个|艾米|十一|销售部|
| 一个|艾米|十二个|支持|
| 一个|艾米|十三个|市场部|
| 2个|彼得|十二个|支持|
| 2个|彼得|十三个|市场部|
我想对结果进行分组,使“团队”列按队友ID或队友姓名显示在一行中,如下所示:
| 队友ID|队友姓名|团队ID|团队|
| - -|- -|- -|- -|
| 一个|艾米|十一、十二、十三|销售、支持、营销|
| 2个|彼得|十二、十三|支持、营销|
我尝试了子查询、合并、一些奇怪的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
e5nqia27

e5nqia271#

一个简单的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

  • 注意 *。我在Teammatename上使用了distinct,但我认为这是多余的,如果每个不同的TeammateID的Teammatename都是唯一的,则可以删除它。
kqhtkvqz

kqhtkvqz2#

SELECT
    tm.teammate_id AS "Teammate ID",
    tm.name AS "Teammate name",
    GROUP_CONCAT(DISTINCT itt.team_id ORDER BY itt.team_id ASC) AS "Team IDs",
    GROUP_CONCAT(DISTINCT it.team ORDER BY it.team DESC) AS "Teams"
FROM intercom_teammates tm
LEFT JOIN intercom_teammate_teams itt ON tm.teammate_id = itt.teammate_id
LEFT JOIN intercom_teams it ON tm.teammate_id = it.teammate_id
GROUP BY tm.teammate_id, tm.name

注意:我已经将您的JOIN更正为intercom_teams,将itt.teammate_id更改为it.teammate_id;它会丢弃结果集。
结果:

| Teammate ID | Teammate name | Team IDs | Teams                    |
|-------------|---------------|----------|--------------------------|
| 1           | Amy           | 11,12,13 | Support,Sales,Marketing  |
| 2           | Peter         | 12,13    | Support,Marketing        |
  • 小提琴 *

相关问题