zoukankan      html  css  js  c++  java
  • SQL练习题20200903

    github SQL练习题20200903

    MySQL:只用一个sql select 语句查询有不及格科目的学生,不及格科目的数量,以及平均分(所有科目的平均分,分数分布在2张表中)。
    要点:1、统计每个学生不及格可科目的个数。2、计算平均分。

    create table students1(
    id int,
    name varchar(25),
    course varchar(25),
    score float
    );
    insert into students1 (id, name,course, score) values(1, 'zhangsan', 'math', 83);
    insert into students1 (id, name,course, score) values(2, 'zhangsan', 'chinese', 54);
    insert into students1 (id, name,course, score) values(3, 'zhangsan', 'eng', 59);
    insert into students1 (id, name,course, score) values(4, 'lisi', 'math', 56);
    insert into students1 (id, name,course, score) values(5, 'lisi', 'chinese', 57);
    insert into students1 (id, name,course, score) values(6, 'lisi', 'eng', 50);
    insert into students1 (id, name,course, score) values(7, 'wagnwu', 'math', 83);
    insert into students1 (id, name,course, score) values(8, 'wagnwu', 'chinese', 100);
    insert into students1 (id, name,course, score) values(9, 'wagnwu', 'chinese', 100);
    
    create table students2(
    id int,
    name varchar(25),
    course varchar(25),
    score float
    );
    insert into students2 (id, name,course, score) values(1, 'zhangsan', 'physics', 60);
    insert into students2 (id, name,course, score) values(2, 'zhangsan', 'chemistry', 49);
    insert into students2 (id, name,course, score) values(3, 'zhangsan', 'biology', 90);
    insert into students2 (id, name,course, score) values(4, 'lisi', 'physics', 59);
    insert into students2 (id, name,course, score) values(5, 'lisi', 'biology', 60);
    insert into students2 (id, name,course, score) values(6, 'lisi', 'biology', 100);
    insert into students2 (id, name,course, score) values(7, 'wagnwu', 'physics', 90);
    insert into students2 (id, name,course, score) values(8, 'wagnwu', 'biology', 45);
    
    

    首先,将两个表的数据合并起来,使用union all,然后基于合并的数据根据学生名进行分组,使用聚合函数avg计算出平均分,然后使用case when来判断score不及格的数量(这里使用sum结合case when进行统计),使用having进行条件过滤,将全部含有不及格成绩的学生列出来。

    SELECT name,avg(score), sum(case when score<60 then 1 else 0 end) FROM((SELECT * FROM students1) UNION ALL (SELECT * FROM students2 )) as a group by name having sum(case when score <60 then 1 else 0 end)>1;
    +----------+--------------------+-------------------------------------------+
    | name     | avg(score)         | sum(case when score<60 then 1 else 0 end) |
    +----------+--------------------+-------------------------------------------+
    | zhangsan |  65.83333333333333 |                                         3 |
    | lisi     | 63.666666666666664 |                                         4 |
    +----------+--------------------+-------------------------------------------+
    
  • 相关阅读:
    [转]用asp.net实现远程获取其他网站页面指定内容
    Occupation career planning
    【原创】Self-Contained Container(自包含容器)
    Kindle 转换器
    Win32 多线程学习笔记
    OC学习心得【适合初学者】
    OC-通讯录
    植物大战僵尸
    三、属性和点语法
    二十、函数指针高级(动态调用)
  • 原文地址:https://www.cnblogs.com/liangping/p/13611139.html
Copyright © 2011-2022 走看看