SQL

RANK / DENSE_RANK

admin by @admin ADMIN
5d ago
May 31, 2026
Public
0 0 up · 0 down Sign in to vote
`RANK` leaves gaps after ties (1, 2, 2, 4); `DENSE_RANK` doesn't (1, 2, 2, 3). `ROW_NUMBER` is always unique. Pick by what tied rows should produce.
SQL
Raw
SELECT name, score,
       ROW_NUMBER() OVER (ORDER BY score DESC) AS row_num,
       RANK()       OVER (ORDER BY score DESC) AS rank,
       DENSE_RANK() OVER (ORDER BY score DESC) AS dense_rank
FROM   leaderboard;

-- Example output:
--   Alice   100   1   1   1
--   Bob      90   2   2   2
--   Carol    90   3   2   2     ← tied with Bob
--   Dave     80   4   4   3     ← rank skips 3, dense_rank doesn't
--   Eve      70   5   5   4

-- Per-category rank
SELECT product, category, price,
       RANK() OVER (PARTITION BY category ORDER BY price DESC) AS price_rank
FROM   products;
Tags

Save your own code snippets

Create a free account and build your private vault. Share publicly whenever you want.