HQL,SQL刷题,尚硅谷

news2024/11/18 23:38:57

目录

相关表数据:

题目及思路解析:

 查询结果排序&分组指定条件

1、查询学生的总成绩并按照总成绩降序排序

2、按照如下格式显示学生的语文、数学、英语三科成绩,没有成绩的输出为0,按照学生的有效平均成绩降序显示 

3、查询一共参加三门课程且其中一门为语文课程的学生的id和姓名

总结归纳:

知识补充:


相关表数据:

1、student_info

2、course_info

3、score_info

题目及思路解析:

 查询结果排序&分组指定条件

1、查询学生的总成绩并按照总成绩降序排序

代码:

select
    stu_id,
    sum(score) total_score
from score_info
group by stu_id
order by total_score desc ;

思路分析:

首先进行分组,获取到每位学生的所有(参加考试的)课程的成绩,接着使用sum()函数求和,按照题目要求进行输出。

注:这里使用sum(),不可以用count(),因为count()求的是表的行数

结果:

2、按照如下格式显示学生的语文、数学、英语三科成绩,没有成绩的输出为0,按照学生的有效平均成绩降序显示 

输出显示 :学生id  语文    数学    英语   有效课程数      平均成绩

这里结果需要输出有效课程, 参加考试(在表中有成绩)的课程数

代码:

方法1:

Tips: 使用sum(if())函数判断

  select
      stu_id,
      sum(if(course_name='语文',score,0))  `语文`,
      sum(if(course_name='数学',score,0))  `数学`,
      sum(if(course_name='英语',score,0)) `英语`,
      count(*) `有效课程`,
      avg(score) `平均成绩`
  from score_info
  join course_info
  on score_info.course_id=course_info.course_id
  group by stu_id
  order by avg(score) desc;

思路:

首先在score_info表中进行按照stu_id分组,得到每位学生的所有(参加考试的)课程的成绩,接着join连接course_info表得到语文、数学、英语对应的course_id, 然后使用sum(if())输出三个课程的成绩,最后按照题目要求输出内容

注:

`count(*)即score_info表中的行数(即每个人有成绩的课程数)

`avg(score)即所有参考课程成绩的平均值 

`sum(if(a,b,c))即如果满足a条件则输出b(若b非空),否则输出c

方法2:

Tips: 使用nvl()函数判断

select
    t4.stu_id,
    nvl(t1.score,0) `语文`,
    nvl(t2.score,0) `数学`,
    nvl(t3.score,0) `英语`
from
(select
    stu_id,
    score
from score_info
where course_id='01'
)t1
full join

(select
    stu_id,
    score
from score_info
where course_id='02'
)t2
on t1.stu_id=t2.stu_id
full join
(select
    stu_id,
    score
from score_info
where course_id='03'
)t3
on nvl(t1.stu_id,t2.stu_id)=t3.stu_id
full join
(select
     stu_id,
    count(*) cnt,
    avg(score) avg_score
from score_info
group by stu_id
)t4
on coalesce(t1.stu_id,t2.stu_id,t3.stu_id)=t4.stu_id;

思路:

首先获取有语文,有数学,有英语成绩的学生,以及统计课程数查询,平均成绩查询,

接着通过stu_id进行满外连接,最后进行嵌套输出题目要求的内容

注:使用满外连接的原因

 因为题目要求输出三科的成绩,但可能存在只有其中某一科或两科成绩的学生,这样才能在最后按照要求输出三科成绩 

结果:

3、查询一共参加三门课程且其中一门为语文课程的学生的id和姓名

代码:

select
    t2.stu_id id,
    stu_name `姓名`
from
(
        select
        t1.stu_id
    from
        ( select
             stu_id,
             course_id
         from score_info
         where stu_id
         in (select
            stu_id
            from score_info
            join course_info
            on score_info.course_id=course_info.course_id
            where course_name='语文')
         )t1
    group by t1.stu_id
    having count(t1.course_id)=3
)t2
join student_info
on t2.stu_id=student_info.stu_id;

思路:

本题主要是嵌套查询,首先查询在score_info表中有语文成绩的(即course_id为语文的course_id(需join连接course_info表获取))学生,接着在上面基础上,查询有成绩的课程数为3的学生,最后join连接student_info表输出学生id与name

结果:

总结归纳:

以上题主要考察了聚合函数使用,嵌套子查询,分组聚合,结果排序,join连接的使用等 

知识补充:

1、在dataGrip中使用中文别名需要键盘左上角的反单引号(即波浪线下面的小点)

2、sum(if(a,b,c))即如果满足a条件则输出b(若b非空),否则输出c

3、

 nvl(a,b),若a为空则判断b,   nvl()与mysql中的 if not逻辑类似,可嵌套,有两个参数

coalesce(a,b,c...)相当于增强版的nvl函数,与nvl不同的是,coalesce可有多个参数

   

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IntelliJ IDEA 使用 spring Initializr 快速搭建 spring boot 项目遇到的坑

maven使用的是3.5.3 一、创建SpringBoot 二、项目创建成功,启动右键,没有run方法 三、在pom.xml上右键,将其添加为maven项目,然后发现Test模块报错 四、查看pom.xml文件,发现2.3.5Release版本变红,怀疑是版…

github-actions

文章目录 workflow触发器action市场contextsecrets 默认环境变量 workflow name: {{workflow name}} run-name: {{workflow runs name}}on: {{触发器}} #[push]env:{{定义workflow变量}}: valuejobs:{{job name}}:runs-on: {{运行机器}} #ubuntu-latestenv:{{定义job变量}}: v…

react使用@reduxjs/toolkit和react-redux实现store状态管理

一、概述 reduxjs/toolkit和react-redux是用于在React应用中管理全局状态的工具库 1、reduxjs/toolkit: reduxjs/toolkit是Redux官方推荐的工具库,是对 Redux 的二次封装,它提供了一些便捷的API和工具,帮助开发者更快速地编写R…

JavaWeb之 创建 Web项目,使用Tomcat 部署项目,使用 Maven 构建Web项目(一万八千字详解)

目录 前言3.1 Tomcat 简介3.1.1 什么是 Web服务器3.1.2 Tomcat 是什么3.1.3 小结 3.2 Tomcat 的基本使用3.2.1 下载 Tomcat3.2.2 安装 Tomcat3.2.3 卸载 Tomcat3.2.4 启动 Tomcat3.2.5 关闭 Tomcat3.2.6 配置 Tomcat3.2.7 在 Tomcat 中部署 Web项目 3.3 在 IDEA 中创建 Web 项目…

04 Opencv图像操作

文章目录 读写像素修改像素值Vec3b与Vec3F灰度图像增强获取图像通道bitwise_not 算子对图像非操作 读写像素 读一个GRAY像素点的像素值(CV_8UC1) Scalar intensity img.at(y, x); 或者 Scalar intensity img.at(Point(x, y)); 读一个RGB像素点的像素值…

Java图书管理系统---命令行

项目列表 Book包 Book类内包含book的基本属性 BookList类初始化图书列表并且提供图书的属性方法 User包 Administrator类 common类 operator包 功能接口 新增图书功能 借阅图书功能 删除图书功能 显示图书功能 查找图书功能 归还图书功能 结束释放资源功能 运行…

排序(1)

目录 1 排序的概念及其应用 1.1 排序的概念 1.2 排序的应用 1.3 常见的排序算法 2 直接插入排序 2.1 基本思想 2.2 基本思路 2.3 代码实现 2.4 时间复杂度 3 冒泡排序(回顾) 3.1 思路分析 3.2 时间复杂度 4 比较 1 排序的概念及其应用 1.…

[分类指标]准确率、精确率、召回率、F1值、ROC和AUC、MCC马修相关系数

准确率、精确率、召回率、F1值 定义: 1、准确率(Accuracy) 准确率是指分类正确的样本占总样本个数的比例。准确率是针对所有样本的统计量。它被定义为: 准确率能够清晰的判断我们模型的表现,但有一个严重的缺陷&…

双指针问题(Java编写)

日升时奋斗,日落时自省 目录 一、移动零 二、盛水最多的容器 三、快乐数 四、复写零 五、三数之和 六、有效三角形的个数 七、四数之和 一、移动零 题目来源:. - 力扣(LeetCode) 题目主要内容就是将数组中所有的零移动到…

解决VSCode 不能拖拽文件问题

给【以管理员身份运行次程序】关掉,不要打勾 至于为什么开启了管理员就不能拖拽了,我也不知道,我猜的: 这可能是因为在VSCode中,管理员权限可能会限制用户对文件的操作权限。管理员权限对于一些操作可能会有更严格的限…

【Vue3】全局组件,递归组件,动态组件,传送组件,缓存组件,异步组件等

组件使用 父子组件传参父传子模板上直接使用js里面使用ts组件里面泛型接收ts泛型里面设置默认值 子传父方式一,采用defineEmits方式二,采用ts的泛型 方式三,采用ref获取子组件内部暴露的数据和方法子组件先暴露父组件接收 全局组件发现有报错…

云原生精品资料合集(附下载)

云计算是产业数字化转型的关键基础设施,以基础设施资源为中心的云搬迁时代接近尾声,以应用价值为中心的云原生时代已经到,所以IT人员学习云原生正当时!最近跟各位大神征集了云原生的教程,行业报告和最佳实践,总有一款适…

【软考】UML中的图之通信图

目录 1. 说明2. 图示3. 特性4. 例题4.1 例题1 1. 说明 1.通信图强调收发消息的对象的结构组织2.早期版本叫做协作图3.通信图强调参加交互的对象和组织4.首先将参加交互的对象作为图的顶点,然后把连接这些对象的链表示为图的弧,最后用对象发送和接收的消…

『Linux从入门到精通』第 ㉑ 期 - 文件系统详解

文章目录 💐专栏导读💐文章导读🐧认识磁盘🐧逻辑抽象🐧文件系统🐦Block🐦Block Group🐔Block Group 的组成部分 🐦Superblock(超级区块)🐦Group Description(…

FRM模型十二:极值理论

目录 极值理论介绍GEVPOT 代码实现 极值理论介绍 在风险管理中,将事件分为高频高损、高频低损、低频高损、低频低损。其中低频高损是一种非常棘手的损失事件,常出现在市场大跌、金融体系崩溃、金融危机以及自然灾害等事件中。 由于很难给极端事件一个准…

如何解决局域网tcp延迟高来进行安全快速内外网传输呢?

在当今企业运营中,数据的快速流通变得至关重要,但局域网内的TCP延迟问题却成为了数据传输的障碍。本文旨在分析局域网TCP延迟的成因,并探讨几种企业数据传输的常见模式,以及如何为企业选择合适的传输策略,以确保数据在…

简单求和计算器

其实对于计算器的写法在C语言阶段就已经有了,但是,在目前阶段《前后端交互》,这算是一种全新的写法,毕竟将数据从前端返回给后端,然后再将数据返回给前端,都涉及到一些参数的交互,值得我们学习深…

[CISCN2019 华北赛区 Day2 Web1]Hack World 1 题目分析与详解

一、分析判断 进入靶机,主页面如图: 主页面提供给我们一条关键信息: flag值在 表flag 中的 flag列 中。 接着我们尝试输入不同的id,情况分别如图: 当id1时: 当id2时: 当id3时: 我…

博弈论---Nim游戏(公平组合游戏,概念,证明异或为0就是必败态,示例)

目录 概念: 公平组合游戏ICG 有向图游戏 Nim游戏 先手)必胜状态 先手)必败状态 如何确定先手是否必胜或者必败(都采用最优策略) 证明:全部异或为0则是必败状态 综上: 例子 概念&#…

OJ_二叉树已知先序遍历序列(有空叶子)求中序遍历序列

题干 C实现 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<vector> using namespace std;struct TreeNode {char data;TreeNode* left;TreeNode* right; };TreeNode* RecursiveBuildTree(int& i, char str[]) {char c str[i];i;if (c #) {re…