EasyWindow Functions

RANK vs DENSE_RANK: understand the difference

The query

SQL
SELECT
  first_name,
  salary,
  RANK() OVER (ORDER BY salary DESC) AS rank,
  DENSE_RANK() OVER (ORDER BY salary DESC) AS dense_rank,
  ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num
FROM employees
ORDER BY salary DESC;
Tested against PostgreSQL 16

Note

RANK: 1,2,2,4 (skips). DENSE_RANK: 1,2,2,3 (no skip). ROW_NUMBER: 1,2,3,4 (always unique).

Tables referenced