SQL Query

PostgreSQL: How to Rank Rows in SQL

PostgreSQL guide: Assign rankings using ROW_NUMBER, RANK, or DENSE_RANK window functions.

This guide is specifically for PostgreSQL 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:


PostgreSQL-Specific Notes

This page covers PostgreSQL syntax. Other databases may have different syntax for similar operations.

Related Content

From Our Blog

Try it yourself

Practice this query in our interactive SQL sandbox.