我有一个简单的表,里面有id。
1
5
22
当我执行以下操作时
select *, rank() over (order by id) as rank from my table
等级回归
1
2
3
我不明白为什么排名是连续的?我期待像
这样的东西1
4
17
我原本期望dense_rank
函数的连续行为。
答案 0 :(得分:2)
所有ID都不同,这就是这种行为的原因。当您订购的值相等时,排名功能会起作用。
create table TableName(id int);
insert into TableName values(1);
insert into TableName values(5);
insert into TableName values(5);
insert into TableName values(22);
insert into TableName values(22);
insert into TableName values(22);
select *,
rank() over (order by id) as rank,
dense_rank() over (order by id) as dense_rank,
row_number() over (order by id) as row_num
from TableName
ID RANK DENSE_RANK ROW_NUM
1 1 1 1
5 2 2 2
5 2 2 3
22 4 3 4
22 4 3 5
22 4 3 6
答案 1 :(得分:0)
id是连续的吗?如果没有联系,那么RANK和DENSE_RANK将返回相同的值。
答案 2 :(得分:0)
请改为尝试:
;WITH CTE
AS
(
SELECT *,
RANK() OVER(ORDER BY id) as rank
FROM tablename
)
SELECT
c1.Id,
(c1.id - ISNULL(c2.ID, 0)) rank
FROM CTE c1
LEFT JOIN cte c2 ON c1.rank - c2.rank = 1;