zoukankan      html  css  js  c++  java
  • SQL使用子查询,查找班级成绩最高分

    -- 根据要求,获取班级成绩的最高分的学生
    -- 第一个子查询,先去各个科目的最高,再横向比较各个科目的最高,再取最高分的那个科目
    -- 第二个子查询,查询每个同学的最高分
    -- 最后,通过第一个子查询查询出第一个最高分,和第二个子查询查询出学生的最高,当这两个相同时,即要获取的最高分

    第一:子查询做的就是先去每个科目的最高分,再取各个科目的最高分

    • 第一:使用MAX取个各科的最高分(MAX返回一列中的最大值,即纵向比较取最大值)
    • 第二:纵向比较之后,需要横向比较多个科目的最高分,再取多个科目的最大值,从多个值中取最大值 GREATEST
    • 第三:需要取的是每个班级的最高分,所以需要使用到分组 GROUP BY

    SELECT class_name,GREATEST(MAX(Linux),MAX(MySQL),MAX(Java)) 'course_maxscore'
    from tb_grade_score
    GROUP BY class_name

    第二:子查询做的就是查询每个同学的最高分,得出最高分,最后判断最高和第一个子查询的最高分是否一致,一致就是要找的学生

    • 使用GREATEST比较多个科目的分数,得出最大值

    SELECT * ,GREATEST(Linux,MySQL,Java)'Maxscore' FROM tb_grade_score

    第三:第一二子查询,根据条件查询 班级分数最高分和学生的最高分是否一致,一致的话,就是要找的最高分啦
    SELECT t2.student_name,t2.class_name,t1.course_maxscore,t2.Maxscore
    FROM
    (SELECT class_name,GREATEST(MAX(Linux),MAX(MySQL),MAX(Java)) 'course_maxscore'
    from tb_grade_score
    GROUP BY class_name)t1,
    (SELECT * ,GREATEST(Linux,MySQL,Java)'Maxscore' FROM tb_grade_score)t2
    where t1.class_name = t2.class_name and t1.course_maxscore=t2.Maxscore

    最终实现的结果:

    原始的表数据

    最终的结果:

  • 相关阅读:
    嵌入式成长轨迹36 【Zigbee项目】【单片机基础】【单片机SD卡】
    嵌入式成长轨迹31 【嵌入式学习阶段】【ARM环境调试】【UbuntuWin7 NAT联网】
    一个jQuery弹出层(tipsWindown)
    sql的left join 命令详解
    input javascript 之 onclick 大全
    php中调用用户自定义函数的方
    asp 正则表达式使用方法
    conn.execute的用法
    vbscript中的True和False
    JavaScript Cookie 的正确用法
  • 原文地址:https://www.cnblogs.com/cuitang/p/10450328.html
Copyright © 2011-2022 走看看