rank()和row_number()都是用来生成行号的窗口函数,但两者有一些区别:
rank()函数会给相同数值的行分配相同的排名,然后跳过下一个排名值。例如,如果有两行具有相同的值,则这两行将被分配相同的排名,并且下一个排名将被跳过。因此,可能会出现排名的间隔。而row_number()函数会给每一行一个唯一的行号,不会跳过任何行。
当使用rank()函数时,如果有多行具有相同的值,则这些行的排名之和将会被计算并除以行数。例如,如果有两行具有相同的值,它们的排名分别为2和3,则它们的排名之和为5,除以2得到2.5。而row_number()函数不会考虑相同值的情况,每一行都会有一个唯一的行号。
因此,如果需要考虑相同值的情况并希望在排名之和中得到平均排名,可以使用rank()函数。如果需要为每一行分配一个唯一的行号,可以使用row_number()函数。