为了账号安全,请及时绑定邮箱和手机立即绑定

sql 语句查询 前5名后5名的成绩

sql 语句查询 前5名后5名的成绩

吃鸡游戏 2019-04-02 01:00:06
表中就两个字段,名字和成绩。要求按成绩查询前5名后5名的数据sqlserver,要求一条语句
查看完整描述

3 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

两种办法:

  1. 分别求最大和最小,然后union all

    select * from(select * from table order by 成绩) where rownum<=5

    union all

    select * from(select * from table order by 成绩 desc) where rownum<=5

  2. 利用排序,找到每个人的位置,然后输出。排序的方法很多,可以用rownum排序,也可以用row_number()over()排序

    我用row_number()over()写一个

    select a.姓名,a.成绩 from

    (select row_number()over(order by 成绩) num,姓名,成绩 from table) a where a.num<=5 or

    a.num>=(select count(*)-5 from table)

    我没实验,不过就算有问题也应该不大。

sqlserver的版本是啥?是2005以上么?如果是

那么利用那个row_number的应该也可以,不过为了让分数一样的人都出来,那么最好改为

这种情况是假设前五出现分数相同的话,假如前五名有六个人的情况,不过我没有输出名次,另外我上面的那种写法也可以试试,sqlserver好像也可以。

不过如果你要是sql2005以前的版本那时sqlserver还没有这几个开窗函数,那就稍微有点麻烦了。

select 姓名,成绩 from

select rank()over(order by 成绩) num,rank()over(order by 成绩 desc) num_desc,姓名,成绩 from table) a where a.num<=5 or a.num_desc<=5 order by 成绩 desc



查看完整回答
反对 回复 2019-04-03
?
慕码人2483693

TA贡献1860条经验 获得超9个赞

分别倒序顺序排序取出5个
select top 5 * from 成绩表 order by 成绩 desc
select top 5 * from 成绩表 order by 成绩 asc

一条语句就把他们连起来就好了
select * from (select top 5 * from 成绩表order by 成绩 desc) as a
union all
select * from (select top 5 * from 成绩表order by 成绩 asc) as b

查看完整回答
反对 回复 2019-04-03
?
长风秋雁

TA贡献1757条经验 获得超7个赞

(select top 5 * from table order by 成绩 )
union
(select top 5 * from table order by 成绩 desc )

查看完整回答
反对 回复 2019-04-03
  • 3 回答
  • 0 关注
  • 3528 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信