所以我想加入 3 个表来获取数据。我想要的。这是我想要的表格和输出。请帮助我,谢谢!
锦标赛表
id | 锦标赛名称 |
---|---|
1 | 夏季联赛 |
2 | 季节性锦标赛 |
锦标赛_参赛者表
p_id | 锦标赛_id | 团队 ID |
---|---|---|
1 | 1 | 1 |
2 | 1 | 2 |
3 | 2 | 3 |
团队名称表
团队 ID | 团队名称 |
---|---|
1 | 阿尔法 |
2 | 太棒了 |
3 | 查理 |
这是我想要的输出
如果锦标赛 id = 1 则输出
t_name | 团队数量 | 团队名称 |
---|---|---|
夏季联赛 | 2 | 阿尔法,布拉沃 |
GROUP BY
然后使用一些聚合函数来获取相关数据。
select
any_value(t.tournament_name) as t_name,
count(distinct tn.team_id) as '# of teams',
group_concat(tn.team_name) as team_names
from tournament_table as t
left join tournament_participant as tp
on t.id = tp.tournament_id
left join team_name as tn
on tp.team_id = tn.team_id
where t.id = 1
group by t.id;
涉及的聚合函数有:
ANY_VALUE
允许您选择分组行的任何列值(随机)。在这种情况下,这并不重要,因为它们都将是“夏季联赛”。您可以通过将 id
中的 tournament_table
配置为 primary key
来避免使用此功能,如 @user1191247 所解释的。COUNT
来统计参与者。 distinct
修饰符用于对每个参与者仅计数一次。GROUP_CONCAT
连接列内的字符串值