# Rank

Tuple ranking

## Signature

```
rank(operand: Relation, order: Ordering, as: AttrName) -> Relation
```

## Examples

```
rank(suppliers, [:status], :ranking)
```

```
rank(suppliers, [:status, :sid], :ranking)
```

## Description

Extends tuples from `operand`

with a new attribute (`as`

) capturing the
tuple position with respect to `order`

.

The ranking of a tuple `t`

is more precisely defined as the number of tuples
from `operand`

that would come strictly before `t`

if they were all ordered
according to `order`

. 'Equal' tuples with respect to `order`

are not counted
in this ranking.

This means that, unless `order`

is a total order, duplicate ranking may be
observed. In contrast, if `order`

covers a candidate key then the ranking
attribute (`as`

) is unique, and therefore defines an additional candidate
key for the resulting relation.

## Implementation notes

Note that this operator does not compile to SQL so far. The `page`

and
`frame`

operators provide useful alternatives when the aim is to compute
a subset of tuples based on a ranking.