我正在尝试显示来自第 1 队的球员列表以及与他们一起使用的统计数据,这里是表格
表一:球员
╔═══════════════════════════╗
║ id | fname | lname | team ║
╠═══════════════════════════╣
║ 1 | Jason | McFee | 1 ║
║ 2 | John | Smith | 1 ║
║ 3 | Jack | Doe | 1 ║
║ 4 | Wayne | Gretzky | 2 ║
╚═══════════════════════════╝
表 2:events_goals
╔═════════════════════════╗
║ id g_id a1_id a2_id ║
╠═════════════════════════╣
║ 1 1 2 3 ║
║ 2 3 1 2 ║
║ 3 2 1 NULL ║
╚═════════════════════════╝
我想要得到的是这个
名字 - 从表
目标中连接 - 计数所有时间玩家 ID 在 g_id 列辅助
- 计数(a1_id)+ 计数(a2_id)所有时间玩家 ID 在这些列中的任何一个中点
- 总和进球+助攻
╔══════════════════════════════════════╗
║ id | name | goals | assists | points ║
╠══════════════════════════════════════╣
║ 1 J.McFee 1 2 3 ║
║ 2 J.Smith 1 2 3 ║
║ 3 J.Doe 1 1 2 ║
╚══════════════════════════════════════╝
我试图做的
>SELECT id,
>CONCAT_WS(', 'SUBSTR(fname, 1, 1), lname) name,
>FROM players
>WHERE teamid = 1
这让我返回了团队中 ID 为 1 的所有球员的姓名,其中的姓名格式正确,没问题。
我可以通过使用来计算单个玩家的数量
>SELECT COUNT(g_id) FROM events_goals WHERE id = (playerid)
这将为玩家返回正确的进球数
然而,当我把它们放在一起时,统计数据是错误的,当我知道应该有 3 行时它只显示 1 行
> SELECT a.id,
> CONCAT_WS(', 'SUBSTR(a.fname, 1, 1), a.lname) name,
> (COUNT(b.g_id))goals,
> (COUNT(c.a1_id))a1,
> (COUNT(d.a2_id))a2
> FROM players a
> LEFT JOIN events_goals b ON a.id = b.g_id
> LEFT JOIN events_goals c ON a.id = c.a1_id
> LEFT JOIN events_goals d ON a.id = d.a2_id WHERE teamid = 1