I have the following two tables:
sport_a_statistics:
id team_id game_id points 1 1 1 7 2 2 1 8 3 3 2 6 4 1 2 9
sport_b_statistics:
id team_id game_id points 1 1 3 2 2 2 3 1 3 3 4 3 4 1 4 10
I want to calculate the win/loss ratio for each team. This includes making sure to capture the wins and losses from both sport tables since my tournament involves 2 sports. So the output I’m looking for is the following:
team_id wins loss ratio 1 3 1 3.0 2 1 1 1.0 3 0 2 0.0
I can’t wrap my head around how I would do this in one query.
Advertisement
Answer
Assuming you have no ties, you can use window functions and union all
:
select team_id, sum(points = max_points) as num_wins, sum(points < max_points) as num_losses, sum(points = max_points) / nullif(sum(points < max_points), 0) as ratio from ((select a.*, max(points) over (partition by game_id) as max_points from sport_a a ) union all (select b.*, max(points) over (partition by game_id) as max_points from sport_b b ) ) ab group by team_id
Made a small edit ^