select name,
score,
case when score >= 70 then 1 else rank() over(order by score asc) + count(score >=70) end rank
from t1
order by rank;有没有方法把直接count(score >=70)写在select里http://topic.csdn.net/u/20120605/15/e57105b3-1755-4b3f-a37b-7f5f9347538d.html
在我结贴后发现还有问题总结:
满足条件的全部排名为 1 ,剩下的排名是在排名第一的个数为基础,后面依次+1
如:CC EE FF三个都排名第一,剩下的排名应该从4开始
score,
case when score >= 70 then 1 else rank() over(order by score asc) + count(score >=70) end rank
from t1
order by rank;有没有方法把直接count(score >=70)写在select里http://topic.csdn.net/u/20120605/15/e57105b3-1755-4b3f-a37b-7f5f9347538d.html
在我结贴后发现还有问题总结:
满足条件的全部排名为 1 ,剩下的排名是在排名第一的个数为基础,后面依次+1
如:CC EE FF三个都排名第一,剩下的排名应该从4开始
from (select name,
score,
case
when score >= 70 then
100
else
score
end as score2
from t1)
order by rank;
排序方式desc和asc都是都不是固定的,不能把条件写死了
1、条件范围内的记录排名都为1;
2、条件范围外的记录根据排序方式(asc、desc)进行排序,排序起始值为 条件范围内记录和+1;