3384. Team Dominance by Pass Success π
Description
Table: Teams
+-------------+---------+ | Column Name | Type | +-------------+---------+ | player_id | int | | team_name | varchar | +-------------+---------+ player_id is the unique key for this table. Each row contains the unique identifier for player and the name of one of the teams participating in that match.
Table: Passes
+-------------+---------+ | Column Name | Type | +-------------+---------+ | pass_from | int | | time_stamp | varchar | | pass_to | int | +-------------+---------+ (pass_from, time_stamp) is the primary key for this table. pass_from is a foreign key to player_id from Teams table. Each row represents a pass made during a match, time_stamp represents the time in minutes (00:00-90:00) when the pass was made, pass_to is the player_id of the player receiving the pass.
Write a solution to calculate the dominance score for each team in both halves of the match. The rules are as follows:
- A match is divided into two halves: first half (
00:00
-45:00
minutes) and second half (45:01
-90:00
minutes) - The dominance score is calculated based on successful and intercepted passes:
- When pass_to is a player from the same team: +
1
point - When pass_to is a player from the opposing team (interception):
-1
point
- When pass_to is a player from the same team: +
- A higher dominance score indicates better passing performance
Return the result table ordered by team_name
and half_number
in ascending order.
The result format is in the following example.
Example:
Input:
Teams table:
+------------+-----------+ | player_id | team_name | +------------+-----------+ | 1 | Arsenal | | 2 | Arsenal | | 3 | Arsenal | | 4 | Chelsea | | 5 | Chelsea | | 6 | Chelsea | +------------+-----------+
Passes table:
+-----------+------------+---------+ | pass_from | time_stamp | pass_to | +-----------+------------+---------+ | 1 | 00:15 | 2 | | 2 | 00:45 | 3 | | 3 | 01:15 | 1 | | 4 | 00:30 | 1 | | 2 | 46:00 | 3 | | 3 | 46:15 | 4 | | 1 | 46:45 | 2 | | 5 | 46:30 | 6 | +-----------+------------+---------+
Output:
+-----------+-------------+-----------+ | team_name | half_number | dominance | +-----------+-------------+-----------+ | Arsenal | 1 | 3 | | Arsenal | 2 | 1 | | Chelsea | 1 | -1 | | Chelsea | 2 | 1 | +-----------+-------------+-----------+
Explanation:
- First Half (00:00-45:00):
- Arsenal's passes:
- 1 → 2 (00:15): Successful pass (+1)
- 2 → 3 (00:45): Successful pass (+1)
- 3 → 1 (01:15): Successful pass (+1)
- Chelsea's passes:
- 4 → 1 (00:30): Intercepted by Arsenal (-1)
- Arsenal's passes:
- Second Half (45:01-90:00):
- Arsenal's passes:
- 2 → 3 (46:00): Successful pass (+1)
- 3 → 4 (46:15): Intercepted by Chelsea (-1)
- 1 → 2 (46:45): Successful pass (+1)
- Chelsea's passes:
- 5 → 6 (46:30): Successful pass (+1)
- Arsenal's passes:
- The results are ordered by team_name and then half_number
Solutions
Solution 1: Equi-Join + Group By and Sum
We can use an equi-join to find the teams of both the passer and the receiver for each pass. Then, based on the timestamp, we determine whether the pass occurred in the first half or the second half. By checking if the passer and receiver belong to the same team, we calculate the advantage value for each pass. Finally, we group by team name and half number, and sum the advantage values to get the advantage value for each team in the first and second halves.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|