我有以下查询,我试图获取一名球员在职业生涯中的总进球数和总票数。
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/