LEFT JOIN, чтобы найти сумму двух столбцов в разных таблицах

0

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

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
Теги:
left-join

1 ответ

1
Лучший ответ

Вы можете попробовать сценарий следующим образом:

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;
  • 0
    Я попробовал это, хотя он возвращает СУММУ целей, он возвращает только голоса, полученные за первый сезон - т.е. Фред Смит получил 5 голосов в 2017 году и 10 голосов в 2018 году - это просто возвращает СУММ голосов как «5», когда должен вернуть '15'
  • 0
    Я удалил сезонную группу, и это работает - спасибо игорь
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню