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

Posted 苍狼白鹿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么循序渐进写出分组排名相关的知识,希望对你有一定的参考价值。

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

 

以上是关于怎么循序渐进写出分组排名的主要内容,如果未能解决你的问题,请参考以下文章

给定一个数组和分组数,写出随机分组算法

mysql分组排序取组内第一的数据行获取分组后,组内排名第一或最后的数据行。

对表中的每一行进行排名,并将行分组为重复项,而不重置每个组的排名

SQL分组取每组前一(或几)条记录(排名)

PHP 搜索引擎排名跟踪器 - RankTrackr访问片段

Mysql分组排名