## Ranking Functions

The ranking functions compute the ordinal rank of a row within the window partition.

These functions can be used with or without partitioning and ordering.However, using them without ordering almost never makes sense.

The ranking functions can be used to create different type of counters.Consider `SUM(1) OVER (ORDER BY SALARY)`

as an example of what they can do, each of them differently.Following is an example query, also comparing with the `SUM`

behavior.

```
select
id,
salary,
dense_rank() over (order by salary),
rank() over (order by salary),
row_number() over (order by salary),
sum(1) over (order by salary)
from employee
order by salary;
```

```
id salary dense_rank rank row_number sum
-- ------ ---------- ---- ---------- ---
3 8.00 1 1 1 1
4 9.00 2 2 2 2
1 10.00 3 3 3 4
5 10.00 3 3 4 4
2 12.00 4 5 5 5
```

The difference between `DENSE_RANK`

and `RANK`

is that there is a gap related to duplicate rows (relative to the window ordering) only in `RANK`

.`DENSE_RANK`

continues assigning sequential numbers after the duplicate salary.On the other hand, `ROW_NUMBER`

always assigns sequential numbers, even when there are duplicate values.