rownumber和rank区别
时间: 2023-05-25 16:04:45 浏览: 93
在SQL中,ROW_NUMBER()和RANK()是用于查询结果集中行的排名的窗口函数。它们的主要区别在于:
1. ROW_NUMBER()函数返回一个数字序列,它表示按照指定列排序后每行的排名,排名的序列是连续的,没有重复的排名。
2. RANK()函数也返回一个数字序列,但是它会在遇到相同的值时跳过排名,所以如果有两个行具有相同的值,则它们将分配相同的排名,并且下一个排名将跟随它们。
例如:
假设有以下数据:
| Name | Salary |
|------|--------|
| John | 5000 |
| Alex | 4000 |
| Dana | 4000 |
| Jake | 3000 |
使用ROW_NUMBER()函数按照salary排序会产生以下结果:
| Name | Salary | RowNumber |
|------|--------|-----------|
| John | 5000 | 1 |
| Alex | 4000 | 2 |
| Dana | 4000 | 3 |
| Jake | 3000 | 4 |
使用RANK()函数按照salary排序会产生以下结果:
| Name | Salary | Rank |
|------|--------|------|
| John | 5000 | 1 |
| Alex | 4000 | 2 |
| Dana | 4000 | 2 |
| Jake | 3000 | 4 |
可以看到,ROW_NUMBER()为每一行产生了不同的排名,RANK()则将相同值的行分配到相同的排名上。
阅读全文