码迷,mamicode.com
首页 > 其他好文 > 详细

怎么循序渐进写出分组排名

时间:2016-09-06 22:43:33      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:

1.如下图,有两个班,分别是四个人,每个班都有2名学渣,2个学霸

技术分享

 

2.利用row_number() 函数 对两个班级进行排名,如下图

技术分享

 

3.查出每个班级前三名的同学,正好利用上图的rank,观察到上图的rank 就是每个人在自己班级的名次,所以在外面包裹一层 在条件查询就可以了

技术分享

 

附上sql语句:

WITH cte
     AS (SELECT 一班 班级, 张三 姓名, 12 成绩
         UNION ALL
         SELECT 一班 班级, 张四 姓名, 24 成绩
         UNION ALL
         SELECT 二班 班级, 张五 姓, 38 成绩
         UNION ALL
         SELECT 二班 班级, 张六 姓名, 98 成绩
         UNION ALL
         SELECT 二班 班级, 张七 姓名, 45 成绩
         UNION ALL
         SELECT 一班 班级, 张八 姓名, 87 成绩
         UNION ALL
         SELECT 二班 班级, 张九 姓名, 95 成绩
         UNION ALL
         SELECT 一班 班级, 张十 姓名, 88 成绩)
--SELECT *  FROM cte order by [班级] desc
select a.* from (
select row_number() over(PARTITION by [班级] order by [成绩] desc ) rank,* from cte ) a
where a.rank<=3 order by 班级 desc,rank asc

 

怎么循序渐进写出分组排名

标签:

原文地址:http://www.cnblogs.com/zwdxcc/p/mssql.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!