mysql - My-sql一对多关系连接获取左表列的总和

标签 mysql join left-join

<分区>

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

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)

Got the correct query

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

最佳答案

应用简单聚合并在 stats 表上使用 left join 从 player 表中获取所有记录,无论他们是否在 stats 表中有关联的记录

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

编辑过滤器

将统计表的过滤器从 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

关于mysql - My-sql一对多关系连接获取左表列的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48018634/

相关文章:

php - 连接到 Amazon AWS RDS 上的 MySQL

mysql - Eloquent 地按 2 个字段进行搜索

mysql - MySQL SQL_CALC_FOUND_ROWS 和 FOUND_ROWS() 可以用作一个查询吗?

mysql - SQL:如何多次连接同一个表?

MySQL 从 2 个源表插入到 1 个目标表

java - 使用jpa从同一个选择同一个表mariadb的表中删除

php - MySQL 查询的影响

c# - Linq : To join or not to join (which is the better way, 联接或关系)

mysql - 一个简单的选择返回一个空表

MySQL:合并不同的表