mysql、oracle查询学生的各科成绩、总成绩、平均分

1.数据库

  • t_student表结构及数据


    t_student
  • t_score表结构及数据


    t_score

2.需求

要求按照学生展示该生的各科成绩、总成绩、平均分,并按照总分进行排序,效果如下:


结果

3.mysql实现

  • sql
SELECT
    A.id '学号',
    A.NAME '姓名',
    MAX( CASE B.SUBJECT WHEN '数学' THEN B.score ELSE 0 END ) '数学',
    MAX( CASE B.SUBJECT WHEN '语文' THEN B.score ELSE 0 END ) '语文',
    MAX( CASE B.SUBJECT WHEN '英语' THEN B.score ELSE 0 END ) '英语',
    SUM( B.score ) '总分',
    AVG( B.score ) '平均分' 
FROM
    t_student A
    LEFT JOIN t_score B ON A.id = B.s_id 
GROUP BY
    A.id 
ORDER BY
    SUM( B.score ) DESC

或者

SELECT
    A.id '学号',
    A.NAME '姓名',
    MAX( CASE WHEN B.SUBJECT = '数学' THEN B.score ELSE 0 END ) '数学',
    MAX( CASE WHEN B.SUBJECT = '语文' THEN B.score ELSE 0 END ) '语文',
    MAX( CASE WHEN B.SUBJECT = '英语' THEN B.score ELSE 0 END ) '英语',
    SUM( B.score ) '总分',
    AVG( B.score ) '平均分' 
FROM
    t_student A
    LEFT JOIN t_score B ON A.id = B.s_id 
GROUP BY
    A.id 
ORDER BY
    SUM( B.score ) DESC

4.oracle实现

  • sql
SELECT
    A.id '学号',
    A.NAME '姓名',
    MAX( DECODE( B.SUBJECT, '数学', B.score, 0 ) ) '数学',
    MAX( DECODE( B.SUBJECT, '语文', B.score, 0 ) ) '语文',
    MAX( DECODE( B.SUBJECT, '英语', B.score, 0 ) ) '英语',
    SUM( B.score ) '总分',
    AVG( B.score ) '平均分' 
FROM
    t_student A
    LEFT JOIN t_score B ON A.id = B.s_id 
GROUP BY
    A.id 
ORDER BY
    SUM( B.score ) DESC
  • 函数
    MAX:取最大
    SUM:求和
    AVG:求平均
    DECODE:DECODE(value, if1, then1, if2, then2, ..., ifN, thenN, else)
    DECODE(条件, 值1, 返回值1, 值2, 返回值2, ..., 值N, 返回值N, 缺省值)
    DECODE函数与mysql的CASE函数大同小异,只是语法稍稍有所差别。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 S...
    忘了呼吸的那只猫阅读 2,928评论 0 8
  • 50个常用的sql语句Student(S#,Sname,Sage,Ssex) 学生表Course(C#,Cname...
    哈哈海阅读 1,256评论 0 7
  • 说明:以下五十个语句都按照测试数据进行过测试,最好每次只单独运行一个语句。 问题及描述: --1.学生表 Stud...
    lijun_m阅读 1,325评论 0 1
  • Django 准备 “虚拟环境为什么需要虚拟环境:到目前位置,我们所有的第三方包安装都是直接通过 pip inst...
    33jubi阅读 1,345评论 0 5
  • mysql数据库中 :database : 文件夹table : 数据表(数据文件) 进入mysqlmysql -...
    赋闲阅读 581评论 0 0