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
Syntax
rank() OVER (PARTITION BY ... ORDER BY ...)
Return value
bigint.
Examples
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.
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
| Version | Change |
|---|---|
| PostgreSQL 8.4 | Added |
In other languages
RANK()· SQLite
Related
DENSE_RANK()· Rank rows by ORDER BY, giving ties the same rank with no gaps after them (1, 2, 2, 3).ROW_NUMBER()· Number the rows of each window partition 1, 2, 3, … in ORDER BY order. Ties get different numbers.PERCENT_RANK()· Return a row's relative rank from 0 to 1: (rank - 1) / (rows in partition - 1).- SQL Window Functions · tutorial