hive的row_number()、rank()和dense_rank()的区别
- ROW_NUMBER()
ROW_NUMBER() 是 SQL 标准中定义的一种窗口函数,用于生成一个唯一的行号。它会为结果集中的每一行生成一个行号,而且每个行号都是唯一的,不会重复。
- RANK()
RANK() 也是 SQL 标准中定义的一种窗口函数,用于生成一个排名。它会为结果集中的每一行生成一个排名,按照指定的排序规则进行排序。如果存在多个值相同的行,它们会被分配相同的排名。在这种情况下,下一个排名将会跳过相同的排名数。
例如,如果有两个行的排名相同,那么下一个排名将会跳过一个排名,即排名将会是 1、2、2、4、5。
- DENSE_RANK()
DENSE_RANK() 也是 SQL 标准中定义的一种窗口函数,与 RANK() 类似,用于生成一个排名。它也会为结果集中的每一行生成一个排名,按照指定的排序规则进行排序。但是,它不会跳过相同的排名,相同的行将会被分配相同的排名。
例如,如果有两个行的排名相同,那么下一个排名将会是相同的排名,即排名将会是 1、2、2、3、4。
总结:
ROW_NUMBER()、RANK() 和 DENSE_RANK() 都是窗口函数,用于为结果集中的每一行生成一个序号或排名。
- ROW_NUMBER() 生成的序号是唯一的,不会重复。
- RANK() 生成的排名会跳过相同的排名数,相同的行排名不同。
- DENSE_RANK() 生成的排名不会跳过相同的排名数,相同的行排名相同。
原文地址: https://www.cveoy.top/t/topic/wLr 著作权归作者所有。请勿转载和采集!