+---------------+---------+
| Column Name | Type |
+---------------+---------+
| country | varchar |
| gold_medals | int |
| silver_medals | int |
| bronze_medals | int |
+---------------+---------+
In SQL, country is the primary key for this table.
Each row in this table shows a country name and the number of gold, silver, and bronze medals it won in the Olympic games.
The Olympic table is sorted according to the following rules:
The country with more gold medals comes first.
If there is a tie in the gold medals, the country with more silver medals comes first.
If there is a tie in the silver medals, the country with more bronze medals comes first.
If there is a tie in the bronze medals, the countries with the tie are sorted in ascending order lexicographically.
Write a solution to sort the Olympic table.
The result format is shown in the following example.
Input:
Olympic table:+-------------+-------------+---------------+---------------+| country | gold_medals | silver_medals | bronze_medals |+-------------+-------------+---------------+---------------+| China |10|10|20|| South Sudan |0|0|1|| USA |10|10|20|| Israel |2|2|3|| Egypt |2|2|2|+-------------+-------------+---------------+---------------+Output:
+-------------+-------------+---------------+---------------+| country | gold_medals | silver_medals | bronze_medals |+-------------+-------------+---------------+---------------+| China |10|10|20|| USA |10|10|20|| Israel |2|2|3|| Egypt |2|2|2|| South Sudan |0|0|1|+-------------+-------------+---------------+---------------+Explanation:
The tie between China and USA is broken by their lexicographical names. Since "China"is lexicographically smaller than "USA", it comes first.Israel comes before Egypt because it has more bronze medals.
Intuition: We need to implement the Olympic ranking system where countries are ranked by gold medals first, then silver, then bronze, and finally alphabetically by name for ties.
Approach:
Use ORDER BY with multiple columns to implement the ranking hierarchy
Sort by gold_medals DESC (more gold medals first)
Then by silver_medals DESC (more silver medals first for ties in gold)
Then by bronze_medals DESC (more bronze medals first for ties in silver)
Finally by country ASC (alphabetical order for complete ties)
defsortOlympicTable(olympic_data):
"""
olympic_data: List of dictionaries with keys: country, gold_medals, silver_medals, bronze_medals
"""# Custom sorting key functiondefsort_key(row):
return (
-row['gold_medals'], # Negative for descending order-row['silver_medals'], # Negative for descending order-row['bronze_medals'], # Negative for descending order row['country'] # Positive for ascending order )
return sorted(olympic_data, key=sort_key)