row_number与rank
时间: 2023-12-12 08:32:19 浏览: 164
row_number和rank都是Hive内置的分析函数,它们的作用是对查询结果进行排序并返回排名。但是它们的具体实现方式和返回结果有所不同。
1. row_number函数会为每一行返回一个唯一的行号,不会重复,也不会跳跃。例如,如果查询结果有10行数据,那么row_number函数返回的行号就是1到10。
2. rank函数会为数据相同的行返回相同的排名,并且会跳跃。例如,如果查询结果中有3行数据的值相同,那么这3行数据的排名都是1,下一行数据的排名就是4。
3. dense_rank函数类似于rank函数,但是它不会跳跃。例如,如果查询结果中有3行数据的值相同,那么这3行数据的排名都是1,下一行数据的排名就是2。
举个例子,假设有以下查询结果:
| name | score |
|------|-------|
| Tom | 90 |
| Jack | 80 |
| Lucy | 90 |
| Lily | 70 |
使用row_number函数排序后的结果为:
| name | score | row_number |
|------|-------|------------|
| Tom | 90 | 1 |
| Lucy | 90 | 2 |
| Jack | 80 | 3 |
| Lily | 70 | 4 |
使用rank函数排序后的结果为:
| name | score | rank |
|------|-------|------|
| Tom | 90 | 1 |
| Lucy | 90 | 1 |
| Jack | 80 | 3 |
| Lily | 70 | 4 |
使用dense_rank函数排序后的结果为:
| name | score | dense_rank |
|------|-------|------------|
| Tom | 90 | 1 |
| Lucy | 90 | 1 |
| Jack | 80 | 2 |
| Lily | 70 | 3 |
阅读全文