让我们看看我是否正确理解了您的示例数据。
SELECT match_id, round_id, COUNT(*) AS game_count
FROM games
GROUP BY match_id, round_id
这为您提供了每场比赛的比赛次数。比赛是最好的赛制,所以你必须赢得超过一半的比赛场数才能赢得比赛。
SELECT match_id, round_id, player_id, COUNT(*) AS win_count
FROM game_winners
GROUP BY match_id, round_id
这为您提供了每场比赛中每位球员赢得的比赛数。
SELECT match_id, round_id, player_id
FROM game_winners
GROUP BY match_id, round_id
HAVING COUNT(*) * 2 > (
SELECT COUNT(*)
FROM games
WHERE games.match_id = game_winners.match_id
AND games.round_id = game_winners.round_id
)
因此,一种选择是通过子查询添加一个检查,即玩家在比赛中赢得了超过一半的比赛。
SELECT games_won.match_id, games_won.round_id, games_won.player_id
FROM (
SELECT match_id, round_id, player_id, COUNT(*) AS win_count
FROM game_winners
GROUP BY match_id, round_id
) AS games_won
INNER JOIN (
SELECT match_id, round_id, COUNT(*) AS game_count
FROM games
GROUP BY match_id, round_id
) AS all_games
ON games_won.match_id = game_count.match_id
AND games_won.round_id = game_count.round_id
WHERE games_won.win_count * 2 > all_games.game_count
或者,如果您愿意,可以使用联接来完成。