HQL,SQL刷题,尚硅谷

目录

相关表数据:

题目及思路解析:

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

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

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

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

总结归纳:

知识补充:


相关表数据:

1、student_info

2、course_info

3、score_info

题目及思路解析:

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

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

代码:

selectstu_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())函数判断

  selectstu_id,sum(if(course_name='语文',score,0))  `语文`,sum(if(course_name='数学',score,0))  `数学`,sum(if(course_name='英语',score,0)) `英语`,count(*) `有效课程`,avg(score) `平均成绩`from score_infojoin course_infoon score_info.course_id=course_info.course_idgroup by stu_idorder 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()函数判断

selectt4.stu_id,nvl(t1.score,0) `语文`,nvl(t2.score,0) `数学`,nvl(t3.score,0) `英语`
from
(selectstu_id,score
from score_info
where course_id='01'
)t1
full join(selectstu_id,score
from score_info
where course_id='02'
)t2
on t1.stu_id=t2.stu_id
full join
(selectstu_id,score
from score_info
where course_id='03'
)t3
on nvl(t1.stu_id,t2.stu_id)=t3.stu_id
full join
(selectstu_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和姓名

代码:

selectt2.stu_id id,stu_name `姓名`
from
(selectt1.stu_idfrom( selectstu_id,course_idfrom score_infowhere stu_idin (selectstu_idfrom score_infojoin course_infoon score_info.course_id=course_info.course_idwhere course_name='语文'))t1group by t1.stu_idhaving 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.hqwc.cn/news/499932.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

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…

百度SEO工具,自动更新网站的工具

在网站SEO的过程中&#xff0c;不断更新网站内容是提升排名和吸引流量的关键之一。而对于大多数网站管理员来说&#xff0c;频繁手动更新文章并进行SEO优化可能会是一项繁琐且耗时的任务。针对这一问题&#xff0c;百度自动更新文章SEO工具应运而生&#xff0c;它能够帮助网站管…

LeetCode 2120.执行所有后缀指令

现有一个 n x n 大小的网格&#xff0c;左上角单元格坐标 (0, 0) &#xff0c;右下角单元格坐标 (n - 1, n - 1) 。给你整数 n 和一个整数数组 startPos &#xff0c;其中 startPos [startrow, startcol] 表示机器人最开始在坐标为 (startrow, startcol) 的单元格上。 另给你…

Docker中创建nginx-rtmp流媒体服务器

准备工作 需要安装好docker安装好镜像 docker pull alfg/nginx-rtmp docker run -it -p 1935:1935 -p 8080:80 --rm alfg/nginx-rtmp #创建临时容器&#xff0c;容器停止即删除安装好ffmpeg sudo apt update sudo apt install ffmpeg ffmpeg -version安装成功出现如下信息&…

ChatGPT4.0 的优势、升级 4.0 为什么这么难以及如何进行升级?

前言 “ChatGPT4.0一个月多少人民币&#xff1f;” ”chatgpt4账号“ ”chatgpt4 价格“ “chatgpt4多少钱” 最近发现很多小伙伴很想知道关于ChatGPT4.0的事情&#xff0c;于是写了这篇帖子&#xff0c;帮大家分析一下。 一、ChatGPT4.0 的优势 &#xff08;PS&#xff1a;…

一张照片一键换脸:无需数据集和训练 | 开源日报 No.186

s0md3v/roop Stars: 23.6k License: AGPL-3.0 roop 是一个一键换脸的项目。 该项目可以通过一张目标人物的照片&#xff0c;实现对视频中人脸进行替换&#xff0c;无需数据集和训练。其主要功能、关键特性和核心优势包括&#xff1a; 可以在计算机上运行&#xff0c;并支持 C…

PYCHARM PYSIDE6 QT 打包异常处理 no qt platform plugin could be initialized

安装有PYSIDE6的电脑 异常错误 … no qt platform plugin could be initialized … 变量名&#xff1a;QT_QPA_PLATFORM_PLUGIN_PATH &#xff08;一个字都不能改&#xff01;&#xff01;&#xff09; 自己环境变量值&#xff1a;D:\Users\topma\anaconda3\Lib\site-package…

React中对表格实现列表的拖拽排序

1. 效果:推拽手柄列 2. 实现: react中我们需要两个包来实现 ‘array-move’‘react-sortable-hoc’Installation Use npm $ npm install react-sortable-hoc --save 引入 import { arrayMoveImmutable } from array-move import { SortableContainer, SortableElement, Sort…

力扣精选算法100道——排序数组(分治快排)

目录 &#x1f6a9;了解题意 &#x1f6a9;算法原理 &#x1f388;取随机值 &#x1f388;c中取随机数的步骤 &#x1f6a9;代码实现 &#x1f6a9;了解题意 本题的题意很简单&#xff0c;就是将nums数组排成升序即可。 &#x1f6a9;算法原理 本题和颜色分类那个题目很…

Tiktok矩阵系统搭建的逻辑和源代码!

很多和我一样从事外贸工具开发的朋友都清楚&#xff0c;TikTok矩阵系统不仅确保了平台的高效运行&#xff0c;还为用户提供了个性化的内容推荐&#xff0c;从而大大提升了用户黏性&#xff0c;因此很多人都乐意去开发类似的工具&#xff0c;下面我们就来说说Tiktok矩阵系统搭建…

docker 基础(二)

常见命令 Docker最常见的命令就是操作镜像、容器的命令&#xff0c;详见官方文档&#xff1a;https://docs.docker.com/ 数据卷 命令说明文档地址docker volume create创建数据卷docker volume createdocker volume ls创建数据卷docker volume lsdocker volume rm查看所有数…

SCI 投稿各阶段的邮件

SCI 投稿各阶段的邮件 SCI 投稿各阶段的邮件