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