• MySQL牛客题组练习


    SQL24 :运营想要查看参加了答题的山东大学的用户在不同难度下的平均答题题目数 

     这道题还算有点子复杂,贯穿了三个表的信息,调试了好几次才做出来。

    主要还是涉及到连表查询的都要分析各表之间的共同点(连接点),要能够分离出条件并用合理的关键字过滤,以及分组的依据都要考虑清楚。

    这道题的几个关键词 山东大学 做过题的 不同难度下

    既要是山东大学的学生又要是做过题目的,而表一是所有用户信息表,表二是做了题的所有用户具体他情况表,所以过滤条件是 1中山东大学成员 和 2的用户交集 所以where中的条件是:

    where(t1.university = '山东大学'&& t1.device_id = t2.device_id )

    而从题目:运营想要查看参加了答题的山东大学的用户在不同难度下的平均答题题目数 中可知

    分组条件是题目难度,而用户对应做题的题目编号在表二,题目编号对应的难度情况体现在表三,

    所以要将表二和表三进行连表查询,并以难度为分组条件,所以有:

    1. left join question_detail t3
    2. on t3.question_id=t2.question_id
    group by difficult_level

    完整代码:

    1. select t1.university,t3.difficult_level,(count(t2.question_id)/count(distinct t2.device_id))avg_answer_cnt
    2. from user_profile t1 ,question_practice_detail t2
    3. left join question_detail t3
    4. on t3.question_id=t2.question_id
    5. where(t1.university = '山东大学'&& t1.device_id = t2.device_id )
    6. group by difficult_level;

     


    SLQ25:运营想要分别查看学校为山东大学或者性别为男性的用户的device_id、gender、age和gpa数据,请取出相应结果,结果不去重。

     这道题考察的就是一个union / union all

    完整代码:

    1. select device_id,gender,age,gpa
    2. from user_profile
    3. where university='山东大学'
    4. union all
    5. select device_id,gender,age,gpa
    6. from user_profile
    7. where gender = 'male'

    以后做的SQL题目都往这里写笔记(持续更新...)

     

  • 相关阅读:
    【高速PCB电路设计】8.DDR模块设计实战
    APP 开发中的费用一般用在哪里?
    Linux进程概念(二)--进程状态&进程优先级
    PW2162芯片
    16 C++ 二叉树遍历 Binary tree traversal
    NX二次开发-挂菜单栏.men和工具条.rtb及菜单中文汉字乱码问题
    进阶JAVA篇-深入了解内部类
    xss过滤绕过笔记
    Git 详细教程之六:Git 命令总结(基本命令/GitHub/Gitee)
    等保三级安全要求简要攻略-安全物理环境
  • 原文地址:https://blog.csdn.net/m0_62742402/article/details/125628137