hive sql row_number 和rank
时间: 2023-08-25 15:14:16 浏览: 72
Hive中分组取topN_row_number-rank和dense_rank的使用.pdf
在Hive SQL中,ROW_NUMBER()和RANK()都是用于对查询结果进行排序并赋予排名的函数,但是它们的实现方式有些不同:
1. ROW_NUMBER():它会根据ORDER BY子句中指定的列对查询结果进行排序,并为每一行分配一个唯一的行号,行号的值从1开始依次递增。如果有两行数据的排序列的值相同,它们的行号也相同。
2. RANK():它也会根据ORDER BY子句中指定的列对查询结果进行排序,但是它会为相同排序列值的行分配相同的排名,而不是唯一的行号。如果有两行数据的排序列的值相同,它们的排名也相同,并且下一个排名的值会跳过相应的行数。
举个例子,假设有以下数据:
| Name | Score |
|------|-------|
| John | 80 |
| Mary | 90 |
| Tom | 80 |
| Jack | 70 |
使用ROW_NUMBER()函数和RANK()函数的查询结果如下:
| Name | Score | ROW_NUMBER() | RANK() |
|------|-------|-------------|--------|
| Jack | 70 | 1 | 1 |
| John | 80 | 2 | 2 |
| Tom | 80 | 3 | 2 |
| Mary | 90 | 4 | 4 |
可以看到,ROW_NUMBER()函数为每一行分配了唯一的行号,而RANK()函数为分数相同的John和Tom分配了相同的排名。
阅读全文