网站建设的实训技术总结,可以做视频创收的网站,互联网公司花名大全男,哪家外贸网站做的好每天一道大厂SQL题【Day21】华泰证券真题实战(三)
大家好#xff0c;我是Maynor。相信大家和我一样#xff0c;都有一个大厂梦#xff0c;作为一名资深大数据选手#xff0c;深知SQL重要性#xff0c;接下来我准备用100天时间#xff0c;基于大数据岗面试中的经典SQL题我是Maynor。相信大家和我一样都有一个大厂梦作为一名资深大数据选手深知SQL重要性接下来我准备用100天时间基于大数据岗面试中的经典SQL题以每日1题的形式带你过一遍热门SQL题并给出恰如其分的解答。
一路走来随着问题加深发现不会的也愈来愈多。但底气着实足了不少相信不少朋友和我一样日积月累才是最有效的学习方式
每日语录
明明可以靠脸吃饭你却靠才华这就是你跟明明的差距。 第21题
需求列表
2.有表结构及数据如下请完成相应查询
班级表class学生表studentcidcaptionsidsnamegenderclass_id1三年二班1张三女12一年三班2李四女13三年一班3王五男2
老师表teacher课程表coursetidtnamecidcnameteacher_id1马云1生物12马化腾2体育13俞敏洪3物理2
成绩表scoresidstudent_idcourse_idnumber111582126832289
AAA 查询课程2比课程1成绩低的学号
查询课程编号“2”的乘积比课程编号“1”低的所有同学的学号、姓名。
BBB 查询没有学全所有课的学生
查询没有学全所有课的同学的学号、姓名
思路分析
查询课程编号“2”的乘积比课程编号“1”低的所有同学的学号、姓名。
使用with语句创建了一个名为t1的临时表其中包含两个字段学生id和体育成绩如果课程id为2以及生物成绩如果课程id为1。同时使用sum函数对成绩进行求和并使用if函数进行条件判断。在t1中使用group by语句对学生id进行分组并使用having语句筛选出体育成绩小于生物成绩的学生。最后使用join语句将t1与student视图进行关联输出学生id和姓名。
查询没有学全所有课的同学的学号、姓名
首先使用with语句创建了一个名为t1的临时表其中包含三个字段学生id姓名和选修课程数目。在t1中使用left join语句将学生表和成绩表关联通过学生id进行连接统计每个学生选修的课程数目。注意使用left join而不是inner join以便包含选修课程数为0的学生。在t1中使用group by语句对学生id和姓名进行分组以便统计每个学生选修的课程数目。然后使用with语句创建了一个名为t2的临时表其中包含一个字段所有课程的数目。在t2中使用count函数统计了所有课程的数目。最后使用join语句将t1与t2进行关联并使用where语句筛选出选修课程数目小于所有课程数目的学生输出学生id和姓名。
答案获取
建议你先动脑思考动手写一写再对照看下答案如果实在不懂可以点击下方卡片回复:大厂sql 即可。 参考答案适用HQLSparkSQLFlinkSQL即大数据组件其他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.autotrue;如果是SparkSQL就设置合适的shuffle并行度set spark.sql.shuffle.partitions4;
后记
博客主页https://manor.blog.csdn.net
欢迎点赞 收藏 ⭐留言 如有错误敬请指正 本文由 Maynor 原创首发于 CSDN博客 不能老盯着手机屏幕要不时地抬起头看看老板的位置⭐ 专栏持续更新,欢迎订阅https://blog.csdn.net/xianyu120/category_12182595.html