当我们有两个具有一对多关系的表时,我们如何得到左表列的总和。
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
答案 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
编辑过滤器
将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
子句在左表上应用过滤器将从左连接转换为内连接