HQL,SQL刷题,尚硅谷

目录

相关表数据:

​编辑

题目及思路解析:

复杂查询,子查询

1、查询所有课程成绩均小于60分的学生的学号、姓名

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

3、查询出只选修了三门课程的全部学生的学号和姓名

总结归纳:

知识补充:


相关表数据:

1、student_info

2、score_info

3、course_info

题目及思路解析:

复杂查询,子查询

1、查询所有课程成绩均小于60分的学生的学号、姓名

tips:这里关键在所有课程,可以用sum(if())函数方法

代码1:

select
    t1.stu_id,
    stu_name
from
    (
     select
        stu_id,
        sum(if(score<60,0,1)) flag
    from score_info
    group by stu_id
    having flag=0
    )t1
join student_info
on t1.stu_id=student_info.stu_id;

思路1:

这个解法比较常规。首先第一层(里面的子查询)按照学号分组,得到每个学生所有课程考试成绩,然后用sum(if())方法判断求和,相当于判断每个课程的成绩,小于60返回0,反之返回1,最终统计所有课程sum=0的即所有课程均小于60,最后嵌套第二层连接student_info得到学生姓名,输出结果

代码2:

select
     t1.stu_id,
     stu_name
 from(
      select
        stu_id,
        max(score) max_score
    from score_info
    group by stu_id
    having max_score<60
     )t1
 join student_info
 on t1.stu_id=student_info.stu_id;

思路2:

这个解法就比较妙了。关键在第一层(子查询),同样式分组得到每个学生所有课程考试成绩,但是它先求出每个学生的所有成绩中最高分的,然后筛选最高分中小于60(最高分都小于60了,其它也一定小于60),这样就可以得到全部课程成绩均小于60

结果:

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

代码1:

select
    distinct t1.stu_id,
    stu_name
from (
    select
        stu_id
    from score_info
    group by stu_id,course_id
    having count(course_id)<
            (
           select count(course_id)
           from course_info )
     )t1
join student_info
on t1.stu_id=student_info.stu_id;

代码2:

select
    s.stu_id,
    s.stu_name
from student_info s
left join score_info sc on s.stu_id = sc.stu_id
group by s.stu_id, s.stu_name
having count(course_id) < (select count(course_id) from course_info);

思路:

代码1两层嵌套,逻辑比较清晰吧,首先第一层获取从course_info表总课程数,接着第二层查询score_info表 按照学号和课程ID分组,得到每个学生所有课程考试成绩,筛选课程数小于总课程数的学生,然后第三层Join student_info表得到学生姓名,最后输出结果(需要去重)

代码2一层嵌套,不同点在于它查询的是studen_info表,然后join score_info表,筛选部分一样

总的来说,代码2比较简洁一点

结果:

3、查询出只选修了三门课程的全部学生的学号和姓名

代码1:

select
    t1.stu_id,
    stu_name
from (
    select
        stu_id
    from score_info
    group by stu_id
    having count(course_id)=3
     )t1
join student_info
on t1.stu_id=student_info.stu_id;

代码2:


select
    s.stu_id,
    s.stu_name
from student_info s
join (
    select
        stu_id,
        count(course_id) course_count
    from score_info
    group by stu_id
    having course_count =3
    ) t1
on s.stu_id = t1.stu_id;

思路:

这题比较简单。

代码1 ,首先第一层按照stu_id分组,得到每个学生所有课程考试成绩,然后统计course_id数=3的学生,然后第二层连接student_info表,输出结果

代码2主要不同在于它把第一层查询表结果直接与student_info表join连接

结果:

总结归纳:

这几道题主要是考察复杂查询的子查询, Join连接等

知识补充:

关于sum(if())

  • sum(if():有条件累加,常用于分类筛选统计
  •  sum(if)只试用于单个条件判断,如果筛选条件很多,我们可以用sum(case when then else end)来进行多条件筛选

    注意,hive中并没有sum(distinct col1)这种使用方式,我们可以使用sum(col) group by col来达到相同效果.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/427680.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

端口号被占用时的解决办法

1、查看端口占用的进程号 netstat -ano |findstr 8080 2、 找到占用端口的程序 tasklist |findstr 2264 3、kill端口 taskkill /pid 2264 /f

如何在飞书接入ChatGPT并结合内网穿透实现公网远程访问智能AI助手

文章目录 前言环境列表1.飞书设置2.克隆feishu-chatgpt项目3.配置config.yaml文件4.运行feishu-chatgpt项目5.安装cpolar内网穿透6.固定公网地址7.机器人权限配置8.创建版本9.创建测试企业10. 机器人测试 前言 在飞书中创建chatGPT机器人并且对话&#xff0c;在下面操作步骤中…

XV4001KC数字输出 车载用(piezoman)

EPSON的XV4001KC角速度传感器是为满足汽车行业对高精度和高可靠性需求而设计的。它不仅提供了高级的运动监测特性&#xff0c;高精度的角速度测量和温度监测功能&#xff0c;而且其紧凑的设计6.04.83.3mm尺寸对于空间受限的车载环境来说&#xff0c;是一大优势&#xff0c;使得…

网络安全-appcms-master

一、环境 gethub上面自己找appcms-master 二、开始闯关 原理&#xff1a;在评论的时候提交可以提交到管理员列表去&#xff0c;管理员一看cookie和地址就被盗走了 点进去软件后会发现提交按钮 随便提交一下看看 放到div标签里面是不是有可能可以做&#xff0c;看看后台吧 那…

网络安全是什么

网络安全是一种保护计算机、服务器、移动设备、电子系统、网络和数据免受恶意攻击的技术&#xff0c;这种技术也称为信息技术安全或电子信息安全。该术语适用于从业务到移动计算的各种环境&#xff0c;可以分为几个常见类别: 网络安全是一种保护计算机网络免受入侵者&#xff0…

D4890可应用在对讲机上,采用 SOP8/MSOP8两种封装形式

D4890 目前客户主要使用在对讲机上&#xff0c;电压范围2.2V &#xff5e; 5.5V之间&#xff0c;输出功率&#xff08;THDN1%&#xff09;1.0W/8Ω 5.0V。采用 SOP8/MSOP8两种封装形式。 2、推荐的应用线路图如下&#xff1a; 3、实际测试输出波形如下&#xff08;VCC4.5V&…

首尔科技大学最新!基于DBSCAN算法的低分辨率LiDAR点云聚类系统,处理速度提高39.5倍

作者&#xff1a;小柠檬 | 来源&#xff1a;3DCV 在公众号「3DCV」后台&#xff0c;回复「原论文」可获取论文pdf 添加微信&#xff1a;dddvision&#xff0c;备注&#xff1a;3D点云&#xff0c;拉你入群。文末附行业细分群 原文&#xff1a;首尔科技大学最新&#xff01;基…

Python爬虫:爬虫基本概念和流程

前言&#xff1a; 零基础学Python&#xff1a;Python从0到100最新最全教程。 想做这件事情很久了&#xff0c;这次我更新了自己所写过的所有博客&#xff0c;汇集成了Python从0到100&#xff0c;共一百节课&#xff0c;帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

程序员竟然还有职业规划手册?

《程序员职业规划手册》不是一本具体的书&#xff0c;而是由前阿里技术总监雪梅老师讲授的一个专栏课程&#xff0c;总共有20讲&#xff0c;内容基本都是图片和文字形式&#xff0c;也有对应的语音讲述。 回顾了下毕业工作的这几年&#xff0c;我买过很多学习课程&#xff0c;…

老年人居家安全问题,全视通社区居家养老解决方案来赋能

近年来&#xff0c;老年人居家环境问题逐渐受到社会的关注。从新闻报道得知&#xff0c;传统居家环境对老年人存在诸多挑战&#xff0c;比如在入户空间、起居&#xff08;室&#xff09;厅、卧室、卫生间、厨房等区域。这些挑战不仅影响老年人的生活质量&#xff0c;还可能导致…

【Educoder数据挖掘实训】异常值检测-值域法

【Educoder数据挖掘实训】异常值检测-值域法 开挖&#xff01; 这个题中 l o f lof lof算法给的很抽象&#xff0c;先用比较通俗的方式说一下&#xff1a; 首要想法是找到不合群的点&#xff0c;也就是异常点。采用的方法是对局部可达密度进行判断。相较于其他普通的简单基于聚…

服务器后端是学习java还是php

没有绝对的"最好"语言&#xff0c;每种后端语言都有其适用的场景和特点。以下是几种常用的后端语言&#xff1a; 1. Java&#xff1a;Java是一种通用且强大的语言&#xff0c;广泛用于企业级应用和大型系统。它有很好的性能和可靠性&#xff0c;并且具有优秀的生态系…

图像增强技术总结

最近科研需要改进算法&#xff0c;需要先对图像进行增强后处理&#xff0c;所以对图像增强技术做一个总结。图像增强的目的就是要提高图像的质量&#xff0c;在图像处理中&#xff0c;有两种提高图像质量的方法&#xff1a;一是图像在采集的过程中&#xff0c;知道图像质量降低…

正信法律:借款纠纷的民事起诉状怎么写

在借款纠纷中&#xff0c;当协商无果时&#xff0c;诉诸法律成为债权人追回债务的有效途径。而民事起诉状作为启动诉讼程序的法律文书&#xff0c;其撰写质量直接关系到案件的受理与判决。本文旨在简明扼要地阐述如何撰写一份规范的借款纠纷民事起诉状。 起诉状需包含以下几个关…

23种设计模式——工厂方法模式

定义&#xff1a; 一个用于创建对象的接口&#xff0c;让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其他子类。 工厂方法通用类图&#xff1a; 这个图更好理解 在工厂方法模式中&#xff0c;抽象产品类Product负责定义产品的共性&#xff0c;实现对事物最抽象的…

无公网ip环境使用DS file软件远程访问内网群晖NAS中储存的文件

文章目录 1. 群晖安装Cpolar2. 创建TCP公网地址3. 远程访问群晖文件4. 固定TCP公网地址5. 固定TCP地址连接 DS file 是一个由群晖公司开发的文件管理应用程序&#xff0c;主要用于浏览、访问和管理存储在群晖NAS&#xff08;网络附加存储&#xff09;中的文件。这个应用程序具有…

【C++从练气到飞升】01---C++入门

&#x1f388;个人主页&#xff1a;库库的里昂 ✨收录专栏&#xff1a;C从练气到飞升 &#x1f389;鸟欲高飞先振翅&#xff0c;人求上进先读书。 目录 推荐 前言 什么是C C的发展史 &#x1f4cb;命名空间 命名空间定义 命名空间使用 命名空间的嵌套 std命名空间的使用 &#…

JavaScript-如何通过原生JS实现匀速动画

JavaScript-如何通过原生JS实现匀速动画 据我们所知&#xff0c;我们可以通过css3&#xff08;transform translate即可&#xff09;区实现这个动画&#xff0c;但是通常面试的时候&#xff0c;可能会被要求原生手敲&#xff1b; ​ 使用到的知识点&#xff1a;定时器去实现s…

力扣hot4--双指针

题目&#xff1a; 双指针想法&#xff1a; i 指针在数组不为 0 的地方停留&#xff0c;j 指针在每个地方停留&#xff0c;依次交换 i 和 j 指针。当 i 指针遍历完所有数组元素时&#xff0c;j 指针指向的元素及后面的元素都为0。 代码如下&#xff1a; C版本 class Solution …

5.测试教程 - 进阶篇

文章目录 1.按测试对像划分1.1**界面测试**1.2**可靠性测试**1.3**容错性测试**1.4**文档测试**1.5**兼容性测试**1.6**易用性测试**1.7**安装卸载测试**1.8**安全测试**1.9**性能测试**1.10**内存泄漏测试** 2.按是否查看代码划分2.1黑盒测试(Black-box Testing)2.2白盒测试(W…