My-sql一对多关系连接得到左表列的总和

时间:2017-12-29 06:48:07

标签: mysql join left-join

当我们有两个具有一对多关系的表时,我们如何得到左表列的总和。

lapply(df, function(startimei=df$startdate, endtimeri=df$endtime, itemi=df$item) {
sum(df$startdate > startimei & df$endtime<endtimei & df$item==itemi)
} )

一名球员有很多统计记录 那么我怎样才能得到所有球员列出总分的总和。 (即使一个球员无法获得统计数据,他的分数也必须为0)

  

获得了正确的查询

Ex:
Player (player_id,name)
Stats (player_id, game_id, score)

Player
1  Aaron Brooks
2  Beno Udrih
3  James harden

Stats
player_id  score year
1          5     2017
1          3     2017
2          4     2016

The result I need to get is (Player scores in 2017)
Player         Score
Aaron Brooks   8
Beno Udrih     0
James harden   0

1 个答案:

答案 0 :(得分:0)

应用简单聚合并在统计表上使用左连接来获取播放器表中的所有记录,无论它们是否具有与统计信息表关联的记录

select p.player_id,p.name,coalesce(sum(s.score),0)
from player p
left join stats s on p.player_id = s.player_id
group by p.player_id,p.name

Demo

编辑过滤器

将stats表的过滤器从where子句移动到on子句

select p.player_id,p.name,coalesce(sum(s.score),0)
from player p
left join stats s on p.player_id = s.player_id and s.year=2017
group by p.player_id,p.name

使用where子句在左表上应用过滤器将从左连接转换为内连接

Demo