论述这三个开窗排序函数的差异rank(),dense_rank(),row_number()
时间: 2023-08-17 17:48:01 浏览: 174
在Hive中,窗口函数是对一组数据进行聚合计算的函数,它们可以用于分组查询、排序、分析排名等。其中,rank()、dense_rank()、row_number()是常用的开窗排序函数,它们的差异在于计算排名的方式和对相同值的处理方式。
1. rank()
rank()函数用于计算每个记录的排名,相同值的记录排名相同,下一个排名跳过相同值的记录个数。例如,如果有5个记录的分数分别是90、80、80、70、60,那么它们的rank值分别是1、2、2、4、5。rank()函数会跳过相同值的记录,下一个排名不是紧随其后,而是跳过相同值的记录个数。
2. dense_rank()
dense_rank()函数也用于计算每个记录的排名,但与rank()函数不同的是,它不会跳过相同值的记录,而是将它们视为同一排名。例如,如果有5个记录的分数分别是90、80、80、70、60,那么它们的dense_rank值分别是1、2、2、3、4。dense_rank()函数会将相同值的记录视为同一排名,不会跳过它们。
3. row_number()
row_number()函数用于计算每个记录的行号,与rank()和dense_rank()不同的是,它不会计算排名,只会计算行号。例如,如果有5个记录的分数分别是90、80、80、70、60,那么它们的row_number值分别是1、2、3、4、5。row_number()函数不会计算排名,只会计算行号。
因此,这三个开窗排序函数的差异在于计算排名的方式和对相同值的处理方式。rank()函数会跳过相同值的记录,下一个排名不是紧随其后,而是跳过相同值的记录个数;dense_rank()函数将相同值的记录视为同一排名,不会跳过它们;row_number()函数不会计算排名,只会计算行号。
阅读全文