我在前面的一个问题,关于MySQL。
我的数据库中有三个表:
表gp
____________
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中没有时间,所以在我的情况下,萨米尔应该有63+99 =>162.但是我不知道怎么做,我不知道这是否可能
提前感谢各位!
如果没有匹配,使用LEFT JOIN
获取null值,使用IFNULL()
提供默认值代替null。
使用CROSS JOIN
和gp
来指定所有应该考虑的游戏。
SELECT p.name, sum(IFNULL(time, 99)) as total_time
from player p
cross join gp
left join records r on r.player_id = p.id AND r.gp_id = gp.id
WHERE gp.id IN (1, 2, 3)
group by p.id
having count(distinct r.gp_id) > 0
演示