+------------------+---------+
|Column Name |Type|+------------------+---------+
| team_id | int || team_name | varchar || matches_played | int || wins | int || draws | int || losses | int |+------------------+---------+
team_id is the uniquekeyfor this table.
This tablecontains team id, team name, matches_played, wins, draws, and losses.
Write a solution to calculate the points and rank for each team in the league. Points are calculated as follows:
3 points for a win
1 point for a draw
0 points for a loss
Note: Teams with the same points must be assigned the same rank.
Return the result table ordered bypointsin descending ,** ** and then byteam_nameinascending order.
The query result format is in the following example.
Input:
`TeamStats` table:+---------+-----------------+----------------+------+-------+--------+| team_id | team_name | matches_played | wins | draws | losses |+---------+-----------------+----------------+------+-------+--------+|1| Manchester City |10|6|2|2||2| Liverpool |10|6|2|2||3| Chelsea |10|5|3|2||4| Arsenal |10|4|4|2||5| Tottenham |10|3|5|2|+---------+-----------------+----------------+------+-------+--------+Output:
+---------+-----------------+--------+----------+| team_id | team_name | points | position |+---------+-----------------+--------+----------+|2| Liverpool |20|1||1| Manchester City |20|1||3| Chelsea |18|3||4| Arsenal |16|4||5| Tottenham |14|5|+---------+-----------------+--------+----------+Explanation:
* Manchester City and Liverpool both have 20points(6 wins *3 points +2 draws *1 point), so they share position 1.* Chelsea has 18points(5 wins *3 points +3 draws *1 point) and is position 3rd.* Arsenal has 16points(4 wins *3 points +4 draws *1 point) and is position 4th.* Tottenham has 14points(3 wins *3 points +5 draws *1 point) and is position 5th.The output table is ordered by points in descending order, then by team_name
in ascending order.
We need to compute points for each team and assign ranks (positions) such that teams with the same points share the same rank. SQL window functions (RANK or DENSE_RANK) are ideal for this. In pandas, we can use rank methods.