窗口函数 / 排名

/* 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() 相同,但值相同时不跳号,名次连续排下去。