#sql #join #subquery
#sql #Присоединиться #подзапрос
Вопрос:
У меня есть хранимая процедура SQL, которая суммирует результаты для бейсбольной команды. Я «Группирую по» соответствующим столбцам и суммирую остальные, которые мне нужны, чтобы получить общую статистику для выбранного запроса. Это работает нормально и дает мне желаемые результаты.
Ситуация, с которой я сталкиваюсь, заключается в том, что в случаях, когда один игрок может принадлежать к разным командам в течение одного сезона, я не могу сгруппировать по команде. Что я сделал, так это использовал подзапрос, чтобы получить текущую команду игроков. Опять же, работает нормально. Но мне нужно будет получить больше индивидуальной информации, такой как текущий идентификатор команды игрока. Я не могу объединить два столбца в упомянутом выше подзапросе. Плохая практика запускать несколько подзапросов против основного запроса? Есть ли какой-либо другой способ получить конкретную (или отличную) информацию из запроса при использовании Group By?
РЕДАКТИРОВАТЬ добавленную схему таблицы.
SELECT LS.SeasonName, A.SeasonID, PM.PlayerID, PM.PFirstName, PM.PLastName,
(SELECT ILT.TeamName
FROM League_T AS ILT INNER JOIN
Season_T AS IST ON ILT.TeamID = IST.TeamID INNER JOIN
Season_P AS ISP ON IST.SeasonTeamID = ISP.Season_TeamID
WHERE (ISP.PlayerID = PM.PlayerID) AND (ISP.IsCurrent = 1)) AS 'CurrentTM',
(SELECT ILT.TeamID
FROM League_Team AS ILT INNER JOIN
Season_Team AS IST ON ILT.TeamID = IST.TeamID INNER JOIN
Season_P AS ISP ON IST.SeasonTeamID = ISP.Season_TeamID
WHERE (ISP.PlayerID = PM.PlayerID) AND (ISP.IsCurrent = 1)) AS 'CurrentTMID',
Count(Case WHEN GS = 1 THEN GS END) AS GS, --multiple SUM columns here--
FROM Player_Master PM
INNER JOIN Season_P ON PM.PlayerID = Season_P.PlayerID
INNER JOIN Season_S AS A
INNER JOIN Season_SD AS B ON A.GameID = B.GameID
INNER JOIN Season_PP AS C ON B.OutcomeID = C.OutcomeID ON Season_P.Season_PlayerID = C.SeasonPlayerID
INNER JOIN League_Season AS LS ON A.SeasonID = LS.SeasonID
WHERE (B.TeamID = @TeamID) AND (LS.IsCurrent = 1)
Group By LS.SeasonName, A.SeasonID, PM.PlayerID, PM.PFirstName, PM.PLastName
Комментарии:
1. Пожалуйста, предоставьте подробную информацию о ваших схемах таблиц.
Ответ №1:
Если вашему запросу требуются коррелированные подзапросы, то в этом нет ничего плохого … предполагая, что вам действительно нужно это сделать.
Не могли бы вы JOIN
перейти к таблице «игроки», а затем присоединиться к таблице «команды» на основе столбца «player.current_team»?
Комментарии:
1. Мэтью, я должен подумать об этом … Я добавил схему выше. В принципе, групповые запросы немного ограничили меня. Как это работает: Лига владеет командой, лига владеет сезоном, лига владеет игроками. Затем сезон владеет seasonTeam (присоединен к команде лиги), сезонная команда владеет игроком сезона (присоединен к игроку лиги). Статистика игрока принадлежит игре И сезонной команде (b.c один игрок может выступать за несколько сезонных команд в сезоне).