PostgreSQL 18 reference · Window Functions

PostgreSQL RANK() Function

Rank rows by ORDER BY, giving ties the same rank and leaving gaps after them (1, 2, 2, 4).

PostgreSQL 18 Since 8.4

Create a free account to save this page, take notes and track your progress. Sign in

Syntax

rank() OVER (PARTITION BY ... ORDER BY ...)

Return value

bigint.

Examples

Ties share a rank
SELECT name, title, rank() OVER (ORDER BY title) AS r
FROM employees
WHERE department = 'Engineering';

Output

     name     |        title        | r
--------------+---------------------+---
 Omar Haddad  | CTO                 | 1
 Priya Nair   | Engineer            | 2
 Lucas Martin | Engineer            | 2
 Mei Chen     | Engineering Manager | 4
 Jonas Berg   | Senior Engineer     | 5
(5 rows)

Run this on your computer — see “Get Started” for setup.

Within a category
SELECT name, price, rank() OVER (PARTITION BY category_id ORDER BY price DESC) AS r
FROM products
WHERE category_id = 1;

Output

           name           | price | r
--------------------------+-------+---
 The Pragmatic Programmer | 42.00 | 1
 Clean Code               | 37.50 | 2
 SQL for Beginners        | 29.99 | 3
(3 rows)

Run this on your computer — see “Get Started” for setup.

Version history

VersionChange
PostgreSQL 8.4Added

In other languages

Was this page helpful?