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

sql 语句查询 前5名后5名的成绩,第1张

不知道你的是什么数据库,我用oracle的写法了。

两种办法:

分别求最大和最小,然后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

利用排序,找到每个人的位置,然后输出。排序的方法很多,可以用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

方法一:select top 10 * from 表名 order by 列名 方法二: select top 10 percent * from 表名 order by 列名 方法一:是按照指定列名排序后,取前十个方法二:按照指定列名排序后,取总数的10% 希望能够满足您的需求,谢谢采纳


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/10007560.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存