背景
我有一些体育数据表。我有一个team
表和一个manager
表。
manager
表格中的一行有team_id
。
我想介绍拥有多个经理的团队,目前输出如下:
| Team | Managers |
| TEAM1 | 2 |
| TEAM2 | 4 |
(这是一个非常简化的版本,但我认为你得到了要点。)
我使用如下查询获取此数据:
SELECT
COUNT(*) AS Managers,
team.name as Team
FROM team
LEFT JOIN manager ON manager.team_id = team.id
GROUP BY team.id HAVING Managers > 1;
升级
我被要求为此添加另一个输出,即这些团队的所有经理的名称,有多个。
所需的示例输出:
| Team | Managers | Names |
| TEAM1 | 2 | Al Bal, Cal Dal |
| TEAM2 | 4 | Fal Gal, Hal Jal, Kal Lal, Mal Nal |
问题
如何从所有单独的行中获取信息,同时将它们分组?
或者,是否有办法获得所需的经理名称串联,同时仍然将它们分组,如图所示?
到目前为止,如果我只是将manager.name
添加到SELECT
的事物列表中,它只输出其中一个。并不是说我期待它能够发挥作用。把它扔进那里。
答案 0 :(得分:1)
使用GROUP_CONCAT
连接一行上的不同管理器名称。
SELECT
COUNT(*) AS Managers,
team.name as Team,
GROUP_CONCAT(manager.name ORDER BY manager.name)
FROM team
LEFT JOIN manager ON manager.team_id = team.id
GROUP BY team.id HAVING Managers > 1
答案 1 :(得分:1)
您想使用group_concat()
来获取名称。但是,您还应该修复连接:
SELECT t.name as Team, COUNT(*) as num_managers,
GROUP_CONCAT(m.name SEPARATOR ' ') as managers
FROM team t JOIN
manager m
ON m.team_id = t.id
GROUP BY t.id
HAVING num_managers > 1;
因为您需要匹配来获取经理,所以不需要外部联接。
答案 2 :(得分:0)
select team.team_name,count(*) as managers,
group_concat(m_name separator ',') as managers_names
from team left join manager on manager.team_id=team.team_id
group by team.team_id having managers > 1;