每天一道大厂SQL题【Day21】华泰证券真题实战(三)

简介: 每天一道大厂SQL题【Day21】华泰证券真题实战(三)

第21题:

需求列表

2.有表结构及数据如下,请完成相应查询

班级表:class 学生表:student
cid caption sid sname gender class_id
1 三年二班 1 张三 1
2 一年三班 2 李四 1
3 三年一班 3 王五 2
老师表:teacher 课程表:course
tid tname cid cname teacher_id
1 马云 1 生物 1
2 马化腾 2 体育 1
3 俞敏洪 3 物理 2
成绩表:score
sid student_id course_id number
1 1 1 58
2 1 2 68
3 2 2 89
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语句,再执行,直到接近结果表。

4、数据量要小,工具要快,如果用hive,就设置set hive.exec.mode.local.auto=true;如果是SparkSQL,就设置合适的shuffle并行度,set spark.sql.shuffle.partitions=4;

目录
相关文章
|
28天前
|
SQL 数据库 UED
SQL性能提升秘籍:5步优化法与10个实战案例
在数据库管理和应用开发中,SQL查询的性能优化至关重要。高效的SQL查询不仅可以提高应用的响应速度,还能降低服务器负载,提升用户体验。本文将分享SQL优化的五大步骤和十个实战案例,帮助构建高效、稳定的数据库应用。
46 3
|
28天前
|
SQL 缓存 监控
SQL性能提升指南:五大优化策略与十个实战案例
在数据库性能优化的世界里,SQL优化是提升查询效率的关键。一个高效的SQL查询可以显著减少数据库的负载,提高应用响应速度,甚至影响整个系统的稳定性和扩展性。本文将介绍SQL优化的五大步骤,并结合十个实战案例,为你提供一份详尽的性能提升指南。
48 0
|
2月前
|
SQL 关系型数据库 MySQL
sql注入原理与实战(三)数据库操作
sql注入原理与实战(三)数据库操作
sql注入原理与实战(三)数据库操作
|
2月前
|
SQL 数据处理 数据库
SQL语句优化与查询结果优化:提升数据库性能的实战技巧
在数据库管理和应用中,SQL语句的编写和查询结果的优化是提升数据库性能的关键环节
|
2月前
|
SQL 监控 关系型数据库
SQL语句性能分析:实战技巧与详细方法
在数据库管理中,分析SQL语句的性能是优化数据库查询、提升系统响应速度的重要步骤
|
2月前
|
SQL 关系型数据库 Serverless
sql注入原理与实战(四)数据表操作
sql注入原理与实战(四)数据表操作
|
2月前
|
SQL 存储 Java
sql注入原理与实战(二)数据库原理
sql注入原理与实战(二)数据库原理
|
2月前
|
SQL 前端开发 安全
sql注入原理与实战(一)
sql注入原理与实战(一)
|
3月前
|
SQL 安全 数据库
基于SQL Server事务日志的数据库恢复技术及实战代码详解
基于事务日志的数据库恢复技术是SQL Server中一个非常强大的功能,它能够帮助数据库管理员在数据丢失或损坏的情况下,有效地恢复数据。通过定期备份数据库和事务日志,并在需要时按照正确的步骤恢复,可以最大限度地减少数据丢失的风险。需要注意的是,恢复数据是一个需要谨慎操作的过程,建议在执行恢复操作之前,详细了解相关的操作步骤和注意事项,以确保数据的安全和完整。
164 0
|
4月前
|
测试技术 Java
全面保障Struts 2应用质量:掌握单元测试与集成测试的关键策略
【8月更文挑战第31天】Struts 2 的测试策略结合了单元测试与集成测试。单元测试聚焦于单个组件(如 Action 类)的功能验证,常用 Mockito 模拟依赖项;集成测试则关注组件间的交互,利用 Cactus 等框架确保框架拦截器和 Action 映射等按预期工作。通过确保高测试覆盖率并定期更新测试用例,可以提升应用的整体稳定性和质量。
84 0
下一篇
DataWorks