The SQL RANK() function is a window function that assigns a rank to each row within a result set based on the values in one or more columns. The rank value represents the relative position of the row within the result set, with a lower rank indicating a higher position.
Syntax
The syntax of the RANK() function is as follows:
RANK() OVER ( [PARTITION BY partition_expression, ... ] ORDER BY sort_expression [ASC | DESC], ... )
The PARTITION BY clause divides the result set into partitions or groups based on the specified column(s), and the ORDER BY clause specifies the column(s) by which the rows are sorted within each partition.
The RANK() function returns a numeric value for each row that represents its rank within the partition. The rank value starts at 1 for the first row in each partition, and increments by 1 for each subsequent row with the same values in the ORDER BY clause.
Example
For example, consider the following table called students:
id | name | score |
---|---|---|
1 | Alice | 90 |
2 | Bob | 80 |
3 | Carol | 90 |
4 | Dave | 70 |
To assign ranks to the rows based on the score column in descending order, we can use the following query:
SELECT name, score, RANK() OVER (ORDER BY score DESC) as rank FROM students;
This would produce the following result set:
name | score | rank |
---|---|---|
Alice | 90 | 1 |
Carol | 90 | 1 |
Bob | 80 | 3 |
Dave | 70 | 4 |
As you can see, Alice and Carol both have a rank of 1 because they have the highest score, while Bob has a rank of 3 and Dave has a rank of 4.
In summary, the SQL RANK() function is a powerful tool for assigning ranks to rows within a result set based on one or more columns. It can be used to perform a wide range of analytical tasks, such as identifying the top-performing items in a dataset, or identifying the least-performing items.