LEFT JOIN, чтобы найти сумму двух столбцов в разных таблицах - PullRequest
0 голосов
/ 26 июня 2018

У меня следующий запрос, в котором я пытаюсь получить общее количество голов и общее количество голосов за игрока за карьеру.

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 содержатся данные об игроках за сезон в несколько рядов - например, Фред Смит играет в 10 игр, поэтому для каждой игры есть ряд, содержащий PlayerID, Season, Round и Goals забил гол. Таблица PlayerVotes имеет одну строку для каждого игрока за сезон с общим количеством голосов за этот сезон. Например, в 2017 году Фред Смит получил 10 голосов, поэтому будет один ряд данных PlayerID, Season и Votes.

Запрос возвращает сумму голов для игрока за всю карьеру, но сумма голосов не так близка к правильной.

Я пытался удалить AND "p.Season = s.Season" в соединении, но это удваивает цель и подсчитывает голоса.

Если я выполню этот базовый запрос в моей таблице PlayerVotes, результат будет ожидаемым

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

1 Ответ

0 голосов
/ 26 июня 2018

Вы можете попробовать скрипт, подобный этому:

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;
...