rank()和row_number()都是用來生成行號的窗口函數,但兩者有一些區別:
rank()函數會給相同數值的行分配相同的排名,然后跳過下一個排名值。例如,如果有兩行具有相同的值,則這兩行將被分配相同的排名,并且下一個排名將被跳過。因此,可能會出現排名的間隔。而row_number()函數會給每一行一個唯一的行號,不會跳過任何行。
當使用rank()函數時,如果有多行具有相同的值,則這些行的排名之和將會被計算并除以行數。例如,如果有兩行具有相同的值,它們的排名分別為2和3,則它們的排名之和為5,除以2得到2.5。而row_number()函數不會考慮相同值的情況,每一行都會有一個唯一的行號。
因此,如果需要考慮相同值的情況并希望在排名之和中得到平均排名,可以使用rank()函數。如果需要為每一行分配一個唯一的行號,可以使用row_number()函數。