排名函数rank、dense_rank、row_number
rank():返回一个连续的排名值,相同的值将具有相同的排名,可能会有空缺。如果存在两个相同的值,则下一个排名与当前值的排名相同,并且下一个排名将相应地增加。
使用场景:当需要按照某个特定的列对数据进行排序,但不需要为相同值分配连续的排名时,可以使用rank()函数。
dense_rank():返回一个连续的排名值,相同的值将具有相同的排名,没有空缺。即使存在两个相同的值,下一个值的排名也不会受到影响。例如,如果有两个第一名,则下一个排名为第三名。
使用场景:当需要按照某个特定的列对数据进行排序并为相同值分配连续的排名时,可以使用dense_rank()函数。
row_number():返回一个连续的唯一排名值,相同的值将具有不同的排名。每个行都有不同的排名,没有空缺。
使用场景:当需要为每一行分配唯一的排名时,可以使用row_number()函数。使用在排序,实现web程序的分页
使用技巧和注意事项:
- 通常与窗口(window)函数一起使用,窗口函数可以对查询结果中的一部分数据进行排序和分组操作。
- 在使用时,需要使用ORDER BY子句指定排序的列和排序的顺序(可选的)。
- 如果使用了PARTITION BY子句,函数将按照指定的列进行分组,并在每个分组内进行排名操作。
- 在使用rank()和dense_rank()函数时,需要注意可能存在的排名空缺,因此在应用排名结果时要谨慎。
- 使用row_number()函数时,每个行都会分配一个唯一的排名,因此不会出现空缺的情况,可以直接使用排名结果。