SQL DENSE_RANK

Ties still share a rank — but the rank after a tie never skips ahead.

What & Why

DENSE_RANK() handles ties exactly like RANK — but the next distinct value always gets the very next integer, with no gap. "Dense" means no rank number is ever skipped.

See How It Works

BUSINESS QUESTION

Product wants dense feedback-rating ranks without gaps after ties.

iduser_idfeature_idratingnps_scorecommentcreated_at
1101159Clear and useful2024-01-25 12:15:00+00
210224NULLExport worked well2024-02-20 15:40:00+00
3103147Helpful setup flow2024-03-18 09:05:00+00
410433NULLNeeds clearer timing2024-04-08 17:30:00+00
Watch DENSE_RANK preserve a tie without a gapStep 1 of 4
DENSE_RANK() OVER (ORDER BY rating DESC)
feedback_idratingrating_rank
151
242
342
433

Rating 5 receives dense rank one.

EXAMPLE QUERY
SELECT
  id AS feedback_id,
  rating,
  DENSE_RANK() OVER (ORDER BY rating DESC) AS rating_rank
FROM product.feedback
ORDER BY rating_rank, feedback_id;

This lesson's practice is part of Pro.

Advanced business practice

Sign up free to try it on a real business scenario