Оконные функции / Ранжирующие

/* 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 не пропускает следующий числовой ранг, а идет последовательно.