mysql - LEFT JOIN 查找不同表中两列的总和

标签 mysql left-join

我有以下查询,我试图获取一名球员在职业生涯中的总进球数和总票数。

SELECT
    p.PlayerID,
    SUM(s.votes) AS Votes,
    SUM(p.Goals) AS TotalGoals
FROM
    PlayerDetails p
LEFT JOIN PlayerVotes s ON
    p.PlayerID = s.PlayerID AND p.Season = s.Season
WHERE
    p.PlayerID = $PlayerID


PlayerDetails table
PlayerID | Season | Round | Goals |

PlayerVotes table
PlayerID | Season | Votes |

表中数据的主要区别是 PlayerDetails 表包含一个赛季的多行球员数据 - 例如 Fred Smith 打了 10 场比赛,因此每场比赛都有一行,包括 PlayerID、赛季、回合和进球数得分了。 PlayerVotes 表对于每个赛季的每位球员都有一行,其中包含该赛季的总票数。例如,2017 年 Fred Smith 获得了 10 票,因此会有一行数据 PlayerID、Season 和 Votes。

查询返回球员在职业生涯中的进球总数,但得票总数远不正确。

我尝试删除连接上的 AND“p.Season = s.Season”,但这会使目标和投票结果加倍。

如果我在 PlayerVotes 表上运行此基本查询,结果将符合预期

SELECT PlayerID, SUM(Votes) 
FROM PlayerVotes 
WHERE PlayerID = $PlayerID

最佳答案

您可以尝试这样的脚本:

SELECT p.PlayerID, SUM(p.Goals) AS Goals, pv.Votes FROM PlayerDetails AS p
LEFT JOIN (
     SELECT SUM(ppv.Votes) AS Votes, ppv.PlayerID, ppv.Season FROM PlayerVotes AS ppv
     GROUP BY ppv.PlayerID, ppv.Season 
) AS pv ON pv.PlayerID = p.PlayerID AND pv.Season = p.Season
WHERE p.PlayerID = $PlayerID;

关于mysql - LEFT JOIN 查找不同表中两列的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51041682/

相关文章:

mysql - 我应该使用什么语言与MySQL一起使用

MySQL Join 与可选的选择值

mysql - 组合 EXISTS 和 LEFT JOIN

mysql - 在 MySQL 查询中左连接还是右连接?

javascript - 如何使用 jQuery POST 将 get 变量从 JavaScript 传递到 PHP Mysql

MYSQL即使一张表的计数为0也显示结果

php - sql-Mysql : Left join on multiple rows and retrieve 1 row

python - 如何在多个数据帧上进行左连接

mysql通过关联表从2个表中检索数据

PHP/MySQL 查询不起作用