取每个班前5名成绩的sql怎么写

梅小西Echo 2013-05-02 05:18:51
比如有个学生总表
class id name score
分别是班级,学号,姓名,学分

这里面包含了很多个班级的很多学生。
如果一条语句求出每个班级前5名的同学。
...全文
3617 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
专注or全面 2013-05-02
  • 打赏
  • 举报
回复
排名                   class      id         name       score
-------------------- ---------- ---------- ---------- ---------------------------------------
1                    1          N6         E          99.65
2                    1          N3         C          88.67
3                    1          N5         E          88.65
4                    1          N1         A          87.89
5                    1          N2         B          77.89
1                    2          NF         T          99.65
2                    2          NC         V          88.67
3                    2          NE         U          88.65
4                    2          NA         Z          87.89
5                    2          NB         X          77.89

(10 行受影响)
专注or全面 2013-05-02
  • 打赏
  • 举报
回复


--尝试下排名函数,呵呵

create table Table_1
(
class varchar(10), id varchar(10),  name varchar(10), score decimal(8,2)
)

insert into Table_1 values ('1','N1','A',87.89)
insert into Table_1 values ('1','N2','B',77.89)
insert into Table_1 values ('1','N3','C',88.67)
insert into Table_1 values ('1','N4','D',66.89)
insert into Table_1 values ('1','N5','E',88.65)
insert into Table_1 values ('1','N6','E',99.65)
insert into Table_1 values ('2','NA','Z',87.89)
insert into Table_1 values ('2','NB','X',77.89)
insert into Table_1 values ('2','NC','V',88.67)
insert into Table_1 values ('2','ND','Y',66.89)
insert into Table_1 values ('2','NE','U',88.65)
insert into Table_1 values ('2','NF','T',99.65)


SELECT * FROM Table_1

select * from
(SELECT  RANK() OVER(PARTITION BY  CLASS ORDER BY score desc) AS 排名,* FROM Table_1 )t
where t.排名<=5


daiyueqiang2045 2013-05-02
  • 打赏
  • 举报
回复
引用 2 楼 ap0405140 的回复:

select class,id,name,score,rn
from
(select class,id,name,score,
       row_number() over(partition by class order by score desc) 'rn'
 from 学生总表) t where t.rn<=5
OK
MrYangkang 2013-05-02
  • 打赏
  • 举报
回复
引用 4 楼 zhengnan2012 的回复:
[quote=引用 3 楼 zhengnan2012 的回复:] 楼上的有问题 ,楼主要的是每个班的前5名 ;with cte as ( select rn=row_number() over(partition by classid order by score desc),* from tb ) select * from cte where rn<=5;
我说的是1楼- -![/quote]嗯,没看清题目
MrYangkang 2013-05-02
  • 打赏
  • 举报
回复
with t as( select *,row_number() over(partition by classid order by id desc) 'rn' from student ) select * from t where rn<6
zhengnan2012 2013-05-02
  • 打赏
  • 举报
回复
引用 3 楼 zhengnan2012 的回复:
楼上的有问题 ,楼主要的是每个班的前5名 ;with cte as ( select rn=row_number() over(partition by classid order by score desc),* from tb ) select * from cte where rn<=5;
我说的是1楼- -!
zhengnan2012 2013-05-02
  • 打赏
  • 举报
回复
楼上的有问题 ,楼主要的是每个班的前5名 ;with cte as ( select rn=row_number() over(partition by classid order by score desc),* from tb ) select * from cte where rn<=5;
唐诗三百首 2013-05-02
  • 打赏
  • 举报
回复

select class,id,name,score,rn
from
(select class,id,name,score,
       row_number() over(partition by class order by score desc) 'rn'
 from 学生总表) t where t.rn<=5
MrYangkang 2013-05-02
  • 打赏
  • 举报
回复
select top 5 b.name as rs from class a,student b where a.id=b.classid group by b.name order by 2 desc

34,837

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧