Ranking window functions assign ordered numbers to rows based on a specified sort expression. They are essential for leaderboards, pagination, top-N analysis, and identifying duplicates.
SELECT
column_list,
RANK() OVER (
PARTITION BY partition_column
ORDER BY sort_column DESC
) AS rank_value
FROM table_name;
SELECT
employee_name,
department,
salary,
ROW_NUMBER() OVER (
PARTITION BY department
ORDER BY salary DESC
) AS row_num
FROM employees;
SELECT
employee_name,
department,
salary,
RANK() OVER (
PARTITION BY department
ORDER BY salary DESC
) AS rank_pos
FROM employees;
SELECT
employee_name,
department,
salary,
DENSE_RANK() OVER (
PARTITION BY department
ORDER BY salary DESC
) AS dense_rank
FROM employees;
WITH RankedSalaries AS (
SELECT
department_id,
employee_name,
salary,
DENSE_RANK() OVER (
PARTITION BY department_id
ORDER BY salary DESC
) AS rank_in_dept
FROM employees
)
SELECT *
FROM RankedSalaries
WHERE rank_in_dept <= 3;
SELECT *
FROM (
SELECT
ROW_NUMBER() OVER (ORDER BY order_date DESC) AS row_num,
order_id,
customer_id,
total_amount
FROM orders
) AS temp
WHERE row_num BETWEEN 11 AND 20;
| Function | Handles Ties | Skips Ranks | Great For |
|---|---|---|---|
| ROW_NUMBER() | No (always unique) | N/A | Deterministic ordering, pagination |
| RANK() | Yes | Yes (1, 1, 3) | Competition scoring, awarding prizes |
| DENSE_RANK() | Yes | No (1, 1, 2) | Grouped ranking without gaps |