sql 怎么先分组再查询每组中前三天数据?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 怎么先分组再查询每组中前三天数据?相关的知识,希望对你有一定的参考价值。

字段:StudentName , Score , Class 分别为学生姓名,分数,班级 要求查询出每个班级成绩前三的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
看看是不是你要的,这用到了分组排序编号
参考技术A 有一种比较中规中矩的办法:

先把班级列表插入一张临时表:
select distinct(Class) from table into #abc

用游标循环这张临时表,把每个班级成绩前三的人取出来,插入另外一张临时表:
insert into #result select top 3 * from table where class = @class order by Score desc

最后把#result表select出来

看楼下有没有更简便的办法,可以不用游标
参考技术B mark ,同学习

以上是关于sql 怎么先分组再查询每组中前三天数据?的主要内容,如果未能解决你的问题,请参考以下文章

ORACLE分组排序查询

sql子查询可以再分组吗

MySQL 先按某字段分组,再取每组中前N条记录

mysql分组排序,取每组第一条数据

mysql 分组子查询sql怎么写

sql分组后取每组前三