DENSE_RANK ( ) OVER ( [ <partition_by_clause> ] < order_by_clause > )
DENSE_RANK()
是一个窗口函数,它为分区或结果集中的每一行分配排名,而排名值没有间隙。
行的等级从行前的不同等级值的数量增加1。
- 首先,
PARTITION BY
子句将FROM
子句生成的结果集划分为分区。DENSE_RANK()
函数应用于每个分区。 - 其次,
ORDER BY
子句指定DENSE_RANK()
函数操作的每个分区中的行顺序。 - 如果分区具有两个或更多具有相同排名值的行,则将为这些行中的每一行分配相同的排t:
id分组后,按照v1升序,v2降序排序
select *,dense_rank() over (partition by id order by v1,v2 desc) as rk from t
rk是连续的如 1,1,2,2,3........
使用rank()排序,rk是不连续的,如1,1,3,3,5......