Давайте посмотрим, правильно ли я понял ваши образцы данных.
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
Или, если вы предпочитаете, вы можете сделать это с помощью объединения.