#3246
Easy Database Premier league table ranking
Database
78.4% acceptance
Mar 31, 2026
12
0
No description available.
Solution
Pandas
Time O(1)
Space O(1)
# Table: TeamStats
#
# +------------------+---------+
# | Column Name | Type |
# +------------------+---------+
# | team_id | int |
# | team_name | varchar |
# | matches_played | int |
# | wins | int |
# | draws | int |
# | losses | int |
# +------------------+---------+
# team_id is the unique key for this table.
# This table contains 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 by points in descending, and then by team_name in ascending order.
#
# The query result format is in the following example.
#
# Example 1:
# 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 20 points (6 wins * 3 points + 2 draws * 1 point), so they share position 1.
# Chelsea has 18 points (5 wins * 3 points + 3 draws * 1 point) and is position 3rd.
# Arsenal has 16 points (4 wins * 3 points + 4 draws * 1 point) and is position 4th.
# Tottenham has 14 points (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.
import pandas as pd
def calculate_team_standings(team_stats: pd.DataFrame) -> pd.DataFrame:
team_stats['points'] = team_stats['wins'] * 3 + team_stats['draws']
team_stats['position'] = team_stats['points'].rank(method='min', ascending=False).astype(int)
return team_stats[['team_id', 'team_name', 'points', 'position']].sort_values(['points', 'team_name'], ascending=[False, True])