dense_rank
Rows with equal ordering values receive the same rank. Each next distinct ordering value increases the rank by one, regardless of how many rows share the preceding rank.
Syntax
dense_rank() OVER ([PARTITION BY expression, ...] ORDER BY expression, ...)Arguments
The function takes no arguments. PARTITION BY starts an independent ranking for each group; without it, all selected rows form one partition. ORDER BY inside OVER determines the ranking order. A frame clause does not restrict the rows used for ranking.
Returned value
An INTEGER greater than or equal to 1. The window order does not determine the final output order; use an outer ORDER BY to sort the result.
Example Ranking employee salaries
Ada and Grace have the same salary and therefore belong to the same peer group.
CREATE TABLE salaries (player TEXT, salary INTEGER);
INSERT INTO salaries VALUES ('Ada', 100), ('Grace', 100), ('Linus', 80), ('Sam', 60);SELECT player, salary,
dense_rank() OVER (ORDER BY salary DESC) AS result
FROM salaries
ORDER BY salary DESC, player
FORMAT csv;"Ada",100,1
"Grace",100,1
"Linus",80,2
"Sam",60,3See rank, dense_rank and row_number to compare tie handling, and window functions for partition and frame syntax.