DENSE_RANK ( ) OVER ( [ <partition_by_clause> ] < order_by_clause > )

DENSE_RANK()是一个窗口函数,它为分区或结果集中的每一行分配排名,而排名值没有间隙。

行的等级从行前的不同等级值的数量增加1。

  • 首先,PARTITION BY子句将FROM子句生成的结果集划分为分区。DENSE_RANK()函数应用于每个分区。
  • 其次,ORDER BY  子句指定DENSE_RANK()函数操作的每个分区中的行顺序。
  • 如果分区具有两个或更多具有相同排名值的行,则将为这些行中的每一行分配相同的排t:

【Mysql】窗口函数:dense_rank()和rank()_java

 id分组后,按照v1升序,v2降序排序

select *,dense_rank() over (partition by id order by v1,v2 desc) as rk from t

【Mysql】窗口函数:dense_rank()和rank()_升序_02

 rk是连续的如 1,1,2,2,3........

使用rank()排序,rk是不连续的,如1,1,3,3,5......