zoukankan      html  css  js  c++  java
  • 3.取出每个班级分数排在前两位的学生

    现在有一个表:成绩表grade,有四个班级的学生,现在问题是:取出每个班级分数为前两名的 学生信息

    这个问题的解决办法有很多,在此刻我的方法是,

    select sname, class, score from grade where (
      select count(*) from grade as f where f.class=grade.class and f.score>=grade.score
    ) <= 2;

    说明:一个外表grade 一个内表f, grade每查询一条数据 a 时,f表都会查询整个表中 与 数据 a的class相等,且score>=a.score ,且满足这两个条件的个数<=2,

    满足了这三个条件说明 这条数据就是某个班级里面 分数在前两位的学生了。

    查询的结果: 

    这个结果, 达到了我们的目的。

    比方说:还是上面的表 grade , 现在想查询 每个班级分数倒数两位的同学 

    sql: 

    select sname, class, score from grade where (
    select count(*) from grade as f where f.class=grade.class and f.score<=grade.score
    ) <=2;

     就是第二个分数比较的条件改变了,思路一样。

    比方说:还是上面的表 grade , 现在想查询 每个班级分数倒数第一的同学

     sql:

    select sname, class, score from grade where (
    select count(*) from grade as f where f.class=grade.class and f.score<=grade.score
    ) =1;

     ---------------------------------------------------------------------------------

    回到上面的话题,假如说我要查询grade表中 每个班级分数排名前两位的学生,并每个班级学生分数从大到小排列

    (你会发现前面查询到的结果,每个班级的学生都没按分数大小排序的哦),那怎样让查询到的结果,每个班级里面的学生按分数从大到小排序呢?

    解决办法分两步: 1.首先将grade表按班级分组,每组按升序排列: select * from grade order by class asc, score desc

                         2.在步骤1的查询结果基础上,查询每个班级前两名的学生。

    最终的sql就是这样:

    1 select sname, class, score from (select * from grade order by class, score desc ) grade where ( 
    2   select count(*) from grade as f where f.class = grade.class and f.score>=grade.score 
    3 )<= 2;

    结果:

    结果我们可以看到,每个班级里面的分数最大的两个学生也是按分数从大到小排列的,这就达到了我们的目的了。

    (select * from grade order by class, score desc )就用到上一篇说的分组排序哦,
  • 相关阅读:
    [ExtJS5学习笔记]第十一节 Extjs5MVVM模式下系统登录实例
    PS 滤镜算法原理——曝光过度
    PS 滤镜算法原理 ——马赛克
    OpenCV——彩色图像转成灰度图像
    [ExtJS5学习笔记]第十节 Extjs5新增特性之ViewModel和DataBinding
    【翻译】EXTJS 编码风格指南与实例
    【翻译】Ext JS最新技巧——2014-8-13
    [ExtJS5学习笔记]第九节 Extjs5的mvc与mvvm框架结构简介
    [ExtJS5学习笔记]第八节 Extjs5的Ext.toolbar.Toolbar工具条组件及其应用
    [ExtJS5学习笔记]第七节 Extjs5的组件components及其模板事件方法学习
  • 原文地址:https://www.cnblogs.com/WNof11020520/p/9058166.html
Copyright © 2011-2022 走看看