0%

sql排名函数

文章字数:353,阅读全文大约需要1分钟

一、ROW_NUMBER

作用:给查询的数据加上行号
例如:

1
select ROW_NUMBER() over(order by score desc) index,score,name from studentScore

查询学生的成绩score和名字name并且根据成绩排序order by score desc,最后加上行号ROW_NUMBER() over...

1
2
3
4
5
6
index|score|name
1 |100 |st1
2 |90 |st1
3 |90 |st1
4 |80 |st1
5 |70 |st1

二、RANK

作用:排名,如果有同名次的,会累加名次。比如找前5名,没有同名次的时候输出名次1,2,3,4,5的数据。如果有名次一样的,输出的则是名次1,2,2,4,5。

例如:

1
select RANK() over(order by studentScore desc) studentRank, * from studentScore
1
2
3
4
5
6
studentRank|score|name
1 |100 |st1
2 |90 |st1
2 |90 |st1
4 |80 |st1
5 |70 |st1

三、DENSE_RANK

作用:排名,区别于RANK。当有同名次的时候,不会累计,即有同名次是会显示名次1,2,2,3,4

例如:

1
select DENSE_RANK() over(order by studentScore desc) studentRank, * from studentScore
1
2
3
4
5
6
studentRank|score|name
1 |100 |st1
2 |90 |st1
2 |90 |st1
3 |80 |st1
4 |70 |st1

NTILE

作用:将数据切分成几个部分,并标记部分代号。比如NTILE(2),就是将所有数据平分成两个部分,一部分是1,另一部分是2

例如

1
select NTILE(2) over(order by studentScore desc) number,* from studentScore
1
2
3
4
5
6
studentRank|score|name
1 |100 |st1
1 |90 |st1
1 |90 |st1
2 |80 |st1
2 |70 |st1

关键词: sql