sql 怎么先分组再查询每组中前三天数据?
字段:StudentName,Score,Class分别为学生姓名,分数,班级要求查询出每个班级成绩前三的3个人最后按班级排序显示出数据。...
字段:StudentName , Score , Class 分别为学生姓名,分数,班级 要求查询出每个班级成绩前三的3个人最后按班级排序显示出数据。
展开
3个回答
展开全部
SELECT TEST1.STUDENTNAME, TEST1.SCORE, TEST1.CLASS
FROM (SELECT STUDENTNAME,
SCORE,
CLASS,
ROW_NUMBER() OVER(PARTITION BY CLASS ORDER BY CLASS, SCORE DESC) ROW_NUM
FROM TABLE_NAME) TEST1
WHERE TEST1.ROW_NUM <= 3
ORDER BY TEST1.CLASS, TEST1.STUDENTNAME
看看是不是你要的,这用到了分组排序编号
FROM (SELECT STUDENTNAME,
SCORE,
CLASS,
ROW_NUMBER() OVER(PARTITION BY CLASS ORDER BY CLASS, SCORE DESC) ROW_NUM
FROM TABLE_NAME) TEST1
WHERE TEST1.ROW_NUM <= 3
ORDER BY TEST1.CLASS, TEST1.STUDENTNAME
看看是不是你要的,这用到了分组排序编号
展开全部
有一种比较中规中矩的办法:
先把班级列表插入一张临时表:
select distinct(Class) from table into #abc
用游标循环这张临时表,把每个班级成绩前三的人取出来,插入另外一张临时表:
insert into #result select top 3 * from table where class = @class order by Score desc
最后把#result表select出来
看楼下有没有更简便的办法,可以不用游标
先把班级列表插入一张临时表:
select distinct(Class) from table into #abc
用游标循环这张临时表,把每个班级成绩前三的人取出来,插入另外一张临时表:
insert into #result select top 3 * from table where class = @class order by Score desc
最后把#result表select出来
看楼下有没有更简便的办法,可以不用游标
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询