我遇到了一个关于MySQL的问题。
我的数据库中有三个表:
表总成
____________
id | name |
____________
1 | Le Mans|
2 | Toulon |
3 | Rennes |
桌上型游戏机
____________
id | name |
____________
1 | Thibaut|
2 | Fred |
3 | Samir |
表格记录
_____________________________
id | gp_id | player_id | time
_____________________________
1 | 1 | 1 | 22
2 | 2 | 1 | 33
3 | 3 | 1 | 44
4 | 3 | 2 | 40
5 | 2 | 2 | 35
6 | 1 | 2 | 20
7 | 1 | 3 | 25
8 | 3 | 3 | 38
我想获得在某些特定GP上至少有一个记录的玩家的时间总和,并为他们没有时间的GP设置默认时间
我不知道我怎么才能得到它。实际上我的SQL查询得到的值,但我不知道如何设置GP的默认时间没有完成的一些球员。
SELECT p.name, sum(time) as total_time
from records r
join gp g on r.gp_id = g.id
join player p on r.player_id = p.id
where gp.id in ( 1, 2, 3)
having count(distinct g.id) > 0
group by r.player_id
例如,对于此查询,我将获得以下值:
name | total_time
_________________
Thibaut | 99
Fred | 95
Samir | 63
但我希望默认时间为99,如果在一个GP中没有时间给一个球员,所以在我的情况下,Samir应该有63+99 =〉162。但我不知道如何做到这一点,我不知道这是否可能
提前感谢各位!
1条答案
按热度按时间y53ybaqx1#
如果没有匹配项,则使用
LEFT JOIN
获取空值,使用IFNULL()
提供默认值来代替NULL。使用
CROSS JOIN
和gp
来指定应该考虑的所有博弈。DEMO