Skip to content

rank ​

Rows with equal ordering values receive the same rank. The next distinct value receives the position it would have in the full sorted partition, so ties leave gaps.

Syntax

text
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.

sql
CREATE TABLE salaries (player TEXT, salary INTEGER);
INSERT INTO salaries VALUES ('Ada', 100), ('Grace', 100), ('Linus', 80), ('Sam', 60);
sql
SELECT player, salary,
       rank() OVER (ORDER BY salary DESC) AS result
FROM salaries
ORDER BY salary DESC, player
FORMAT csv;
text
"Ada",100,1
"Grace",100,1
"Linus",80,3
"Sam",60,4

See rank, dense_rank and row_number to compare tie handling, and window functions for partition and frame syntax.