SQL语句案例

1、按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩

分析:


平均 avg---GROUP BY分组
从高到低--ORDER BY
所有学生的所有课程的成绩---行转列
所有学生----外联(所有)----RIGHT JOIN右联

SELECT
    s.sid,
    s.sname ,
    不能写sc.score,用sum
    sum()
            当cid等于01是语  文
            (case when sc.cid='01' then sc.score end)语文,
            (case when sc.cid='02' then sc.score end)数学,
            (case when sc.cid='03' then sc.score end)英语,
            平均值,取两位
            ROUND(avg(sc.score),2) 
FROM
    t_mysql_score sc
    RIGHT JOIN t_mysql_student s ON sc.sid = s.sid 
GROUP BY
    s.sid,
    s.sname

 方法一case when

SELECTs.sid,s.sname ,sum((case when sc.cid='01' then sc.score end))语文,sum((case when sc.cid='02' then sc.score end))数学,sum((case when sc.cid='03' then sc.score end))英语,ROUND(avg(sc.score),2) 
FROMt_mysql_score scRIGHT JOIN t_mysql_student s ON sc.sid = s.sid 
GROUP BYs.sid,s.sname

效果: 

方法二、if 

 如果cid等于01,取分数,如果没有就取0(类似于三元运算符)
    sum(if(sc.cid='01',sc.score,0))语文,
 


SELECTs.sid,s.sname ,sum(if(sc.cid='01',sc.score,0))语文,sum(if(sc.cid='02',sc.score,0))数学,sum(if(sc.cid='03',sc.score,0))英语,ROUND(avg(sc.score),2) 
FROMt_mysql_score scRIGHT JOIN t_mysql_student s ON sc.sid = s.sid 
GROUP BYs.sid,s.sname

效果:  

2、检索" 01 "课程分数小于 60,按分数降序排列的学生信息

分析:
SELECT s.sid,
s.*,
sc.score
from
t_mysql_student s,
t_mysql_score sc
where s.sid=sc.sid
" 01 "课程
and sc.cid='01'
分数小于 60
and sc.score < 60
按分数降序
ORDER BY sc.score


SELECTs.sid,s.*,sc.score 
FROMt_mysql_student s,t_mysql_score sc 
WHEREs.sid = sc.sid AND sc.cid = '01' AND sc.score < 60 
ORDER BYsc.score desc

效果:  

 

3、查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩 

分析:
两/平均成绩----数量----用聚合函数---要分组
不及格---比较---用筛选
有没有可能没有选学科,所有不用统计出来---内连接
SELECT s.sid,
sc.score,
avg(sc.score)
from
联表
t_mysql_student s,
t_mysql_score sc
where s.sid=sc.sid
B、筛选后再分组
and sc.score<60
分组
GROUP BY s.sid,
sc.score,
A、分组后筛选
having sc.score<60先A还是选B
选A,上面不能写sc.score导致会重复,导致语法错误

常识性语法:
凡是没有在分组中出现的,上面就不能有

分了组只会出现一行数据

 

	SELECTs.sid,s.sname,avg( sc.score ) n FROMt_mysql_student s,t_mysql_score sc WHEREs.sid = sc.sid AND sc.score < 60 GROUP BYs.sid,s.sname

效果:  

 

4、查询没学过"张三"老师讲授的任一门课程的学生姓名 

分析:
没学过--->找到学过张三老师的--->子查询

找张三老师教了那些课程  
select cid from 
t_mysql_course c,
t_mysql_teacher t
where c.tid=t.tid
and t.tname='张三'

学生只要没学过就查出来   
select * from t_mysql_score sc,
t_mysql_student s
where s.sid=sc.sid 
and sc.cid not in()

有重复要分组
GROUP BY s.sid ,s.sname

SELECTs.sid,s.sname 
FROMt_mysql_score sc,t_mysql_student s 
WHEREs.sid = sc.sid AND sc.cid NOT IN ( SELECT cid FROM t_mysql_course c, t_mysql_teacher t WHERE c.tid = t.tid AND t.tname = '张三' ) 
GROUP BYs.sid,s.sname

 

效果: 

 

5、查询没有学全所有课程的同学的信息

分析:
没有学全---一共三门,有可能学了2门1门
学全了有多少门:统计一共有多少门学科
①统计一共有多少门
②统计每个学生学了多少门
③做比较
统计---》聚合函数---》分组

一共有多少学科
select count(*) from t_mysql_course
统计每个学生学了多少门---不管有没有学都有(每个)---外联
SELECT s.sid,s.sname ,count(sc.score) n from t_mysql_student s 
left join
t_mysql_score sc
on s.sid=sc.sid
GROUP BY s.sid,s.sname
做比较
HAVING n<统计一共有多少门

SELECTs.sid,s.sname,count( sc.score ) n 
FROMt_mysql_student sLEFT JOIN t_mysql_score sc ON s.sid = sc.sid 
GROUP BYs.sid,s.sname 
HAVINGn < (SELECTcount(*) FROMt_mysql_course)

效果:  

6、查询学过「张三」老师授课的同学的信息 

分析:

需要的表:
t_mysql_course
t_mysql_student
t_mysql_teacher
t_mysql_score


s.*哪个学生,c.cname哪门课程,t.tname那个老师,sc.score哪个成绩--出现重复

SELECT s.*, c.cname,t.tname,sc.score from
t_mysql_course c,
t_mysql_student s,
t_mysql_teacher t,
t_mysql_score sc
where
绑定关系(看表---老师可以绑定课程|分数可以绑定学生和课程)
t.tid=c.tid
and c.cid=sc.cid
and  sc.sid=s.sid
学过「张三」老师
and t.tname='张三'

SELECTs.*,c.cname,t.tname,sc.score 
FROMt_mysql_course c,t_mysql_student s,t_mysql_teacher t,t_mysql_score sc 
WHEREt.tid = c.tid AND c.cid = sc.cid AND sc.sid = s.sid AND t.tname = '张三'

效果:  

7、查询各科成绩最高分、最低分和平均分:


以如下形式显示:课程 ID,课程 name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90
要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列

分析:

left join 不能管有没有考试都算--外联

第一步:统计课程了
SELECT
        c.cid,
        c.cname,
        第二步最高分,最低分,平均分
        max(sc.score) 最高分,
        min(sc.score) 最低分,
    ROUND(avg(sc.score),2) 平均分 ,
    第三步统计优秀人数
    if(sc.score>90,1,0)
    第四步:统计优秀率--优秀人÷总人
    sum(if(sc.score>=90,1,0))/(SELECT count(1) from t_mysql_student)
    要100 取两位形式,
    ROUND(X*100,2)
    加%形式
    concat(X,'%')
    FROM
        t_mysql_score sc
        LEFT JOIN t_mysql_course c ON sc.cid = c.cid 
    GROUP BY
        c.cid,
        c.cname

SELECTc.cid,c.cname,count(sc.sid) 人数,max(sc.score) 最高分,min(sc.score) 最低分,ROUND(avg(sc.score),2) 平均分 ,CONCAT(ROUND(sum(if(sc.score>=90,1,0))/(SELECT count(1) from t_mysql_student)*100,2),'%')  优秀率,CONCAT(ROUND(sum(if(sc.score>=80 and sc.score<90,1,0))/(SELECT count(1) from t_mysql_student)*100,2),'%')  优良率,CONCAT(ROUND(sum(if(sc.score>=70 and sc.score<80,1,0))/(SELECT count(1) from t_mysql_student)*100,2),'%')  中等率,CONCAT(ROUND(sum(if(sc.score>=60,1,0))/(SELECT count(1) from t_mysql_student)*100,2),'%') 及格率FROMt_mysql_score scLEFT JOIN t_mysql_course c ON sc.cid = c.cid GROUP BYc.cid,c.cname

效果:  

二、思维导图 

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

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

相关文章

linux 如何创建文件

我们在写一些教程的时候&#xff0c;经常会需要创建一些用于演示的文档&#xff0c;这些文档往往需要填充一些不特定的内容。那么如何快速的创建演示用的文档呢&#xff1f; docfaker.py docfaker.py是一个py脚本&#xff0c;用于创建一个简单的txt文档&#xff0c;docfaker.…

简单工厂模式、工厂方法、抽象工厂模式

下面例子中鼠标&#xff0c;键盘&#xff0c;耳麦为产品&#xff0c;惠普&#xff0c;戴尔为工厂。 简单工厂模式 简单工厂模式不是 23 种里的一种&#xff0c;简而言之&#xff0c;就是有一个专门生产某个产品的类。 比如下图中的鼠标工厂&#xff0c;专业生产鼠标&#xf…

基于springboot+vue2的课程教学考试系统(Java毕业设计)

大家好&#xff0c;我是DeBug&#xff0c;很高兴你能来阅读&#xff01;作为一名热爱编程的程序员&#xff0c;我希望通过这些教学笔记与大家分享我的编程经验和知识。在这里&#xff0c;我将会结合实际项目经验&#xff0c;分享编程技巧、最佳实践以及解决问题的方法。无论你是…

[情商-11]:人际交流的心理架构与需求层次模型

目录 前言&#xff1a; 一、心理架构 1.1 个体生理层 1.2 个体心理层 1.3 点对点人际交流层 1.4 社会网络层 1.5 社会价值层 二、人的需求层次模型 2.1 需求&#xff08;欲望&#xff09;层次模型 2.2 基因与人需求之间的关系 2.3 个体生理需求 2.4 个体的心理需求…

Unity——VContainer的依赖注入

一、IOC控制反转和DI依赖倒置 1、IOC框架核心原理是依赖倒置原则 C#设计模式的六大原则 使用这种思想方式&#xff0c;可以让我们无需关心对象的生成方式&#xff0c;只需要告诉容器我需要的对象即可&#xff0c;而告诉容器我需要对象的方式就叫做DI&#xff08;依赖注入&…

leetcode刷题记录18(2023-08-29)【最短无序连续子数组(单调栈) | 合并二叉树(dfs) | 任务调度器(桶) | 回文子串(二维dp)】

581. 最短无序连续子数组 给你一个整数数组 nums &#xff0c;你需要找出一个 连续子数组 &#xff0c;如果对这个子数组进行升序排序&#xff0c;那么整个数组都会变为升序排序。 请你找出符合题意的 最短 子数组&#xff0c;并输出它的长度。 示例 1&#xff1a; 输入&am…

IT从业人员如何养生?

目前&#xff0c;电脑对人体生理和心理方面的负面影响已日益受到人们的重视。为此科学使用电脑&#xff0c;减少电脑和网络的危害是十分必要的。好代码网总结了一些it从业人员的保健知识&#xff0c;分享给大家。 一是要增强自我保健意识 工作间隙注意适当休息&#xff0c;一般…

试用 Coroot,一个基于 eBPF 的可观测性工具,用于 Kubernetes 等

在本文中&#xff0c;我们将介绍 Coroot&#xff0c;这是一个使用 eBPF 技术构建的开源工具&#xff0c;旨在用于 Kubernetes 或基于 Docker/containerd 的环境&#xff0c;甚至是非容器化应用程序。Coroot 收集和分析遥测数据&#xff08;指标、日志、跟踪和配置文件&#xff…

遥感影像-语义分割数据集:高分卫星-云数据集详细介绍及训练样本处理流程

原始数据集详情 简介&#xff1a;该云数据集包括RGB三通道的高分辨率图像&#xff0c;包含高分一、高分二及宽幅数据集。 KeyValue卫星类型高分系列覆盖区域未知场景未知分辨率1m、2m、8m数量12000单张尺寸1024*1024原始影像位深8位标签图片位深8位原始影像通道数三通道标签图…

Backtrader 文档学习-Strategy with Signals

Backtrader 文档学习-Strategy with Signals backtrader可以不通过重写策略的方式触发交易&#xff0c;尽管重写策略是首选通用的方式。 下面介绍通过使用信号也是可以实现交易触发的。 1.定义signal import backtrader as btdata bt.feeds.OneOfTheFeeds(datanamemydatana…

HarmonyOS应用开发学习笔记 UIAbility组件与UI的数据同步 EventHub、globalThis

1、 HarmoryOS Ability页面的生命周期 2、 Component自定义组件 3、HarmonyOS 应用开发学习笔记 ets组件生命周期 4、HarmonyOS 应用开发学习笔记 ets组件样式定义 Styles装饰器&#xff1a;定义组件重用样式 Extend装饰器&#xff1a;定义扩展组件样式 5、HarmonyOS 应用开发…

Netty-Netty组件了解

EventLoop 和 EventLoopGroup 回想一下我们在 NIO 中是如何处理我们关心的事件的&#xff1f;在一个 while 循环中 select 出事 件&#xff0c;然后依次处理每种事件。我们可以把它称为事件循环&#xff0c;这就是 EventLoop 。 interface io.netty.channel. EventLoo…

权值初始化

一、梯度消失与爆炸 在神经网络中&#xff0c;梯度消失和梯度爆炸是训练过程中常见的问题。 梯度消失指的是在反向传播过程中&#xff0c;梯度逐渐变小&#xff0c;导致较远处的层对参数的更新影响较小甚至无法更新。这通常发生在深层网络中&#xff0c;特别是使用某些激活函…

TDengine 签约西电电力

近年来&#xff0c;随着云计算和物联网技术的迅猛发展&#xff0c;传统电力行业正朝着数字化、信息化和智能化的大趋势迈进。在传统业务基础上&#xff0c;电力行业构建了信息网络、通信网络和能源网络&#xff0c;致力于实现发电、输电、变电、配电和用电的实时智能联动。在这…

用C#实现简单的线性回归

前言 最近注意到了NumSharp&#xff0c;想学习一下&#xff0c;最好的学习方式就是去实践&#xff0c;因此从github上找了一个用python实现的简单线性回归代码&#xff0c;然后基于NumSharp用C#进行了改写。 NumSharp简介 NumSharp&#xff08;NumPy for C#&#xff09;是一…

[redis] redis主从复制,哨兵模式和集群

一、redis的高可用 1.1 redis高可用的概念 在web服务器中&#xff0c;高可用是指服务器可以正常访问的时间&#xff0c;衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%、99.999%等等)。 高可用的计算公式是1-&#xff08;宕机时间&#xff09;/&#xff08;宕机时…

leetcode17 电话号码的字母组合

方法1 if-else方法 if-else方法的思路及其简单粗暴&#xff0c;如下图所示&#xff0c;以数字234为例&#xff0c;数字2所对应的字母是abc&#xff0c;数字3所对应的是def&#xff0c;数字4所对应的是ghi&#xff0c;最后所产生的结果就类似于我们中学所学过的树状图一样&…

opencv-4.8.0编译及使用

1 编译 opencv的编译总体来说比较简单&#xff0c;但必须记住一点&#xff1a;opencv的版本必须和opencv_contrib的版本保持一致。例如opencv使用4.8.0&#xff0c;opencv_contrib也必须使用4.8.0。 进入opencv和opencv_contrib的github页面后&#xff0c;默认看到的是git分支&…

浅析三种Anaconda虚拟环境创建方式和第三方包的安装

目录 引言 一、Anaconda虚拟环境创建方式 1. 使用conda命令创建虚拟环境 2. 使用conda-forge创建虚拟环境 3. 使用Miniconda创建虚拟环境 二、第三方包的安装和管理 1. 使用 pip 安装包&#xff1a; 2. 使用 conda 安装包&#xff1a; 三、结论与建议 引言 在当今的数…

【现代密码学】笔记3.1-3.3 --规约证明、伪随机性《introduction to modern cryphtography》

【现代密码学】笔记3.1-3.3 --规约证明、伪随机性《introduction to modern cryphtography》 写在最前面私钥加密与伪随机性 第一部分密码学的计算方法论计算安全加密的定义&#xff1a;对称加密算法 伪随机性伪随机生成器&#xff08;PRG&#xff09; 规约法规约证明 构造安全…