如何在sum上添加默认值以具有相等的行数sum

  • 本文关键字:sum 添加 默认值 mysql
  • 更新时间 :
  • 英文 :


我在前面的一个问题,关于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 JOINgp来指定所有应该考虑的游戏。

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

演示

最新更新