简述row_number,rank,dense_rank的区别 ?

row_number、rank、dense_rank都是SQL中常用的窗口函数,它们的主要作用是为查询结果的每一行生成一个唯一的序号或排名,常常与ORDER BY子句一起使用。这三个函数的主要区别在于处理相同数据时的排名策略不同。

  1. row_number():此函数为每一行分配一个唯一的序号。即使两行的数据相同,row_number()也会为它们分配不同的序号。序号是根据ORDER BY子句中的排序顺序来分配的。因此,row_number()的结果总是从1开始递增的唯一数字序列。
  2. rank():此函数为每一行分配一个排名。如果遇到两行或多行数据相同的情况,这些行将获得相同的排名,并且下一个排名会跳过相应的数量。例如,如果有两行数据并列第一,那么下一行数据的排名将是第三,而不是第二。
  3. dense_rank():此函数与rank()类似,为每一行分配一个排名。不同之处在于,当遇到相同的数据时,dense_rank()不会跳过下一个排名。使用dense_rank(),如果两行数据并列第一,那么下一行数据的排名将是第二。

总的来说,row_number()、rank()和dense_rank()在处理相同数据时的排名策略不同,具体选择哪个函数取决于你想要的排名结果。

发表评论

后才能评论