This guide is specifically for MySQL syntax.
How to Rank Rows in SQL
Assign rankings using ROW_NUMBER, RANK, or DENSE_RANK window functions.
Quick Answer
SELECT name, salary, RANK() OVER (ORDER BY salary DESC) as rank FROM employees;
Explanation
ROW_NUMBER gives unique sequential numbers. RANK gives same rank to ties but skips numbers. DENSE_RANK gives same rank but doesn't skip.
Query Variants
Row Number
SELECT name, salary, ROW_NUMBER() OVER (ORDER BY salary DESC) as row_num FROM employees;
Rank
SELECT name, salary, RANK() OVER (ORDER BY salary DESC) as rank FROM employees;
Dense Rank
SELECT name, salary, DENSE_RANK() OVER (ORDER BY salary DESC) as dense_rank FROM employees;
Partitioned
SELECT name, department, salary, RANK() OVER (PARTITION BY department ORDER BY salary DESC) as dept_rank FROM employees;
Pro Tips
- ROW_NUMBER: 1, 2, 3, 4...
- RANK: 1, 2, 2, 4... (skips after ties)
- DENSE_RANK: 1, 2, 2, 3... (no skip)
Related SQL Queries
Continue learning with more SQL query examples:
MySQL-Specific Notes
This page covers MySQL syntax. Other databases may have different syntax for similar operations.