SELECT
players.id,
players.name,
games.season_id,
games.game_type_id,
SUM(COALESCE(assists.rows, 0)) AS assists,
SUM(COALESCE(goals.rows, 0)) AS goals
FROM
players
CROSS JOIN
games
LEFT JOIN
(SELECT game_id, player_id, COUNT(*) AS rows FROM assists GROUP BY game_id, player_id) AS assists
ON assists.game_id = games.game_id
LEFT JOIN
(SELECT game_id, player_id, COUNT(*) AS rows FROM goals GROUP BY game_id, player_id) AS assists
ON goals.game_id = games.game_id
GROUP BY
players.id,
players.name,
games.season_id,
games.game_type_id
但它可能会提高性能,如果你有一个Seasons
表和GameType
表。
SELECT
players.id,
players.name,
seasons.id,
game_types.id,
SUM(COALESCE(assists.rows, 0)) AS assists,
SUM(COALESCE(goals.rows, 0)) AS goals
FROM
players
CROSS JOIN
seasons
CROSS JOIN
game_types
LEFT JOIN
games
ON games.season_id = seasons.id
AND games.game_type = game_types.id
LEFT JOIN
(SELECT game_id, player_id, COUNT(*) AS rows FROM assists GROUP BY game_id, player_id) AS assists
ON assists.game_id = games.game_id
LEFT JOIN
(SELECT game_id, player_id, COUNT(*) AS rows FROM goals GROUP BY game_id, player_id) AS assists
ON goals.game_id = games.game_id
GROUP BY
players.id,
players.name,
seasons.id,
game_types.id
也似乎缺少一个表中有没有'GameType' – swasheck
的'GameType'表其实并不重要,因为我需要的是在“游戏”表中找到的游戏类型的ID。 我会尽量在SQL小提琴中弄点东西。 –
另外,“目标”和“助攻”都有一个缺失值(比如该球员在该游戏中的总进球数),或者如果球员有多个目标,您是否有多个“player_id”和“game_id”在一场比赛中? – swasheck