Вот базовое решение, вычисляющее статистику по всем броскам для данного игрока (вы не указали, хотите ли вы их для каждого периода соревнования или нет):
SELECT user, SUM(IF(result = 'WON', 1, 0)) AS won_count,
SUM(IF(result = 'LOST', 1, 0)) AS lost_count,
SUM(IF(result = 'TIED', 1, 0)) AS tied_count,
COUNT(*) AS total_shots_count,
SUM(amount_won) AS total_amount_won,
(SUM(amount_won) / COUNT(*)) AS avg_amount_won_per_shot
FROM user U INNER JOIN competition_periods C ON U.user_id = C.user_id
INNER JOIN shots S ON C.competition_period_id = S.competition_period_id
GROUP BY user
Обратите внимание, что это включает в себя отрицательные значения при расчете показателя «общая выигранная сумма» (то есть общая сумма уменьшается на потери).Если это не правильный алгоритм для вашей игры, вы должны изменить SUM(Amount)
на SUM(IF(Amount > 0, Amount, 0))
в обоих местах, где это происходит в запросе.