mysql语句求排名前五的同学的姓名_一个 mysql 表,只有学生姓名`name`和学生成绩`grade`两列,现在要 SELECT 出排名前十的同学,但如果满分的有 12 个,则 SELECT 的...

vone

129 天前

DENSE_RANK() 可以完美解决。

DENSE_RANK() :

此函数返回结果集分区中每行的排名,排名值没有间断。 特定行的排名等于该特定行之前不同排名值的数量加一。

如果两个或更多行在同一分区中具有相同的排名值,那么每个行将获得相同的排名。 例如,如果两位顶尖销售员具有相同的 SalesYTD 值,则他们的排名值都为一。 接下来 SalesYTD 最高的销售人员排名值为二。 这比所讨论的行之前的不同行的数量多了一。 因此,DENSE_RANK 函数返回的数字没有间断,并且始终具有连续的排名值。

https://docs.microsoft.com/zh-cn/sql/t-sql/functions/dense-rank-transact-sql?view=sql-server-ver15

以下是完整测试代码:

--drop table #SCORE

CREATE TABLE #SCORE

(NAME varchar(32) not null

,GRADE INT not null

)

insert #SCORE(NAME,GRADE) values('学生 1',cast(rand()*100 as int))

insert #SCORE(NAME,GRADE) values('学生 2',cast(rand()*100 as int))

insert #SCORE(NAME,GRADE) values('学生 3',95)

insert #SCORE(NAME,GRADE) values('学生 4',cast(rand()*100 as int))

insert #SCORE(NAME,GRADE) values('学生 5',cast(rand()*100 as int))

insert #SCORE(NAME,GRADE) values('学生 6',95)

insert #SCORE(NAME,GRADE) values('学生 7',cast(rand()*100 as int))

insert #SCORE(NAME,GRADE) values('学生 8',cast(rand()*100 as int))

insert #SCORE(NAME,GRADE) values('学生 9',cast(rand()*100 as int))

insert #SCORE(NAME,GRADE) values('学生 10',80)

insert #SCORE(NAME,GRADE) values('学生 12',cast(rand()*100 as int))

insert #SCORE(NAME,GRADE) values('学生 13',cast(rand()*100 as int))

insert #SCORE(NAME,GRADE) values('学生 14',cast(rand()*100 as int))

insert #SCORE(NAME,GRADE) values('学生 15',80)

insert #SCORE(NAME,GRADE) values('学生 16',cast(rand()*100 as int))

insert #SCORE(NAME,GRADE) values('学生 17',cast(rand()*100 as int))

select * from (

select t.NAME,t.GRADE,DENSE_RANK() over(order by grade desc ) RANK

from #SCORE t

) t

where t.RANK<=10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值