Rank Scores - SQL

SQL offers powerful functions for ranking and sorting data. The "Rank Scores" problem on LeetCode is a perfect case to explore these functionalities. We're tasked to rank game scores stored in a table, following specific rules. Let's dive into the problem and provide solutions in different SQL dialects. 

Problem Overview 

We need to rank scores from the Scores table. The ranking should be from highest to lowest, with ties receiving the same rank and no gaps in ranking numbers after a tie. 

The Scores Table Structure 

id score
1 3.50
2 3.65
3 4.00

SQL Query Solutions 

To solve this, we can use window functions available in modern SQL databases. Specifically, we'll use the DENSE_RANK function, which ranks items without leaving gaps in ranking numbers. 

MySQL Solution 

In MySQL, the solution would look like this:
SELECT
    score,
    DENSE_RANK() OVER (ORDER BY score DESC) AS rank
FROM
    Scores;
This query uses the DENSE_RANK window function to assign ranks to each score, ordered in descending order. 

PostgreSQL Solution 

PostgreSQL also supports window functions, and the query will be similar:
-- Write your PostgreSQL query statement below
SELECT
    score,
    DENSE_RANK() OVER (ORDER BY score DESC) AS rank
FROM
    Scores;

Oracle Solution 

Oracle SQL uses a similar syntax for window functions:
/* Write your PL/SQL query statement below */
SELECT
    score,
    DENSE_RANK() OVER (ORDER BY score DESC) AS rank
FROM
    Scores;

Expected Output 

The output ranks the scores from highest to lowest, with ties receiving the same rank:
score rank
4.00 1
4.00 1
3.85 2
3.65 3
3.65 3
3.50 4

Conclusion 

The "Rank Scores" problem is a great exercise to get familiar with ranking functions in SQL. By using DENSE_RANK, we can easily assign ranks to data while handling ties appropriately. This type of problem is common in real-world scenarios where data needs to be ranked or sorted according to specific rules. The solutions across different SQL dialects are quite similar, showcasing the standardization of SQL functionality in different database systems.

Comments