每天一道大厂SQL题【Day21】华泰证券真题实战(三)_### 华泰证券2 查询课程编号

文章介绍了如何使用SQL(如HQL,SparkSQL,FlinkSQL)通过with语句和临时表,对比课程2的成绩与课程1的成绩,找出成绩较低的学生,并查询未选修所有课程的学生。还提供了分析和优化SQL查询的技巧,如造数据、结果可视化和逐步调试的方法。
摘要由CSDN通过智能技术生成

| 2 | 一年三班 | | | 2 | 李四 | 女 | 1 |
| 3 | 三年一班 | | | 3 | 王五 | 男 | 2 |

老师表:teacher课程表:course
tidtnamecidcnameteacher_id
1马云1生物1
2马化腾2体育1
3俞敏洪3物理2
成绩表:score
sidstudent_idcourse_idnumber
11158
21268
32289
AAA 查询课程2比课程1成绩低的学号

查询课程编号“2”的乘积比课程编号“1”低的所有同学的学号、姓名。

BBB 查询没有学全所有课的学生

查询没有学全所有课的同学的学号、姓名

思路分析

查询课程编号“2”的乘积比课程编号“1”低的所有同学的学号、姓名。
  1. 使用with语句,创建了一个名为t1的临时表,其中包含两个字段:学生id和体育成绩(如果课程id为2),以及生物成绩(如果课程id为1)。同时使用sum函数对成绩进行求和,并使用if函数进行条件判断。
  2. 在t1中使用group by语句对学生id进行分组,并使用having语句筛选出体育成绩小于生物成绩的学生。
  3. 最后使用join语句将t1与student视图进行关联,输出学生id和姓名。
查询没有学全所有课的同学的学号、姓名
  1. 首先使用with语句创建了一个名为t1的临时表,其中包含三个字段:学生id,姓名和选修课程数目。
  2. 在t1中使用left join语句将学生表和成绩表关联,通过学生id进行连接,统计每个学生选修的课程数目。注意使用left join而不是inner join,以便包含选修课程数为0的学生。
  3. 在t1中使用group by语句对学生id和姓名进行分组,以便统计每个学生选修的课程数目。
  4. 然后使用with语句创建了一个名为t2的临时表,其中包含一个字段:所有课程的数目。
  5. 在t2中使用count函数统计了所有课程的数目。
  6. 最后使用join语句将t1与t2进行关联,并使用where语句筛选出选修课程数目小于所有课程数目的学生,输出学生id和姓名。

答案获取

建议你先动脑思考,动手写一写再对照看下答案,如果实在不懂可以点击下方卡片,回复:大厂sql 即可。
参考答案适用HQL,SparkSQL,FlinkSQL,即大数据组件,其他SQL需自行修改。

加技术群讨论

点击下方卡片关注 联系我进群

或者直接私信我进群

文末SQL小技巧

提高SQL功底的思路。
1、造数据。因为有数据支撑,会方便我们根据数据结果去不断调整SQL的写法。
造数据语法既可以create table再insert into,也可以用下面的create temporary view xx as values语句,更简单。
其中create temporary view xx as values语句,SparkSQL语法支持,hive不支持。
2、先将结果表画出来,包括结果字段名有哪些,数据量也画几条。这是分析他要什么。
从源表到结果表,一路可能要走多个步骤,其实就是可能需要多个子查询,过程多就用with as来重构提高可读性。
3、要由简单过度到复杂,不要一下子就写一个很复杂的。
先写简单的select from table…,每个中间步骤都执行打印结果,看是否符合预期, 根据中间结果,进一步调整修饰SQL语句,再执行,直到接近结果表。

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

战项目、大纲路线、讲解视频,并且后续会持续更新**

需要这份系统化资料的朋友,可以戳这里获取

  • 26
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值