/* Available in MySQL, SQL Server, PostgreSQL */
SELECT
Name,
CountryCode,
ROW_NUMBER() over p_code AS _row_number,
RANK() over p_code AS _rank,
DENSE_RANK() over p_code AS _dense_rank
FROM city
WHERE
Name = 'San Jose'
WINDOW p_code AS (PARTITION BY Name ORDER BY CountryCode)
| Name | CountryCode | _row_number | _rank | _dense_rank |
| San José | CRI | 1 | 1 | 1 |
| San Jose | PHL | 2 | 2 | 2 |
| San Jose | PHL | 3 | 2 | 2 |
| San Jose | USA | 4 | 4 | 3 |
| ROW_NUMBER() - функция вычисляет порядковый номер (ранг) строк внутри группы, НЕЗАВИСИМО от того, есть ли в строках повторяющиеся значения или нет. RANK() - функция вычисляет ранг каждой строки внутри группы. Если есть повторяющиеся значения, функция возвращает одинаковый ранг для таких строчек, пропуская при этом следующий числовой ранг. DENSE_RANK() - то же самое что и RANK, только в случае одинаковых значений DENSE_RANK не пропускает следующий числовой ранг, а идет последовательно. |