以postgressql为例:
SQL中的排序函数ROW_NUMBER(), DENSE_RANK()和RANK()都用于对查询结果进行排序,但它们在处理相同数值和空值时的行为是有区别的。
ROW_NUMBER(): 这个函数会给每一行分配一个唯一的、连续的排名。如果有多个行有相同的排名,那么这些行将获得相同的ROW_NUMBER()值。下一个行会从下一个编号开始。如果存在NULL值,默认是升序的情况,null会排到最后,降序则null值会排到最前,null值会分配唯一的排名
DENSE_RANK(): 如果有多个行有相同的排名,会获得相同的排名,下一个行会从下一个编号开始。如果存在NULL值,默认是升序的情况,null会排到最后,降序则null值会排到最前,有多个null值会有相同的排名
RANK(): 如果有多个行有相同的排名,会获得相同的排名,下一个行会跳过之前的所有行的排名,从下一个编号开始。如果存在NULL值,默认是升序的情况,null会排到最后,降序则null值会排到最前,有多个null值会有相同的排名
ROW_NUMBER(): 这个函数会给每一行分配一个唯一的、连续的排名。如果有多个行有相同的排名,那么这些行将获得相同的ROW_NUMBER()值。下一个行会从下一个编号开始。如果存在NULL值,默认是升序的情况,null会排到最后,降序则null值会排到最前,null值会分配唯一的排名
DENSE_RANK(): 如果有多个行有相同的排名,会获得相同的排名,下一个行会从下一个编号开始。如果存在NULL值,默认是升序的情况,null会排到最后,降序则null值会排到最前,有多个null值会有相同的排名。
RANK(): 如果有多个行有相同的排名,会获得相同的排名,下一个行会跳过之前的所有行的排名,从下一个编号开始。如果存在NULL值,默认是升序的情况,null会排到最后,降序则null值会排到最前,有多个null值会有相同的排名