# 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**

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

```sql
CREATE TABLE salaries (player TEXT, salary INTEGER);
INSERT INTO salaries VALUES ('Ada', 100), ('Grace', 100), ('Linus', 80), ('Sam', 60);
```

```sql
SELECT player, salary,
       dense_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,2
"Sam",60,3
```

See [`rank`](https://coordinatordb.com/docs/reference/functions/window-functions/rank), [`dense_rank`](https://coordinatordb.com/docs/reference/functions/window-functions/dense-rank) and [`row_number`](https://coordinatordb.com/docs/reference/functions/window-functions/row-number) to compare tie handling, and [window functions](https://coordinatordb.com/docs/reference/functions/window-functions) for partition and frame syntax.
