SQL语句案例

 

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

分析:
平均 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

 

13)检索" 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

 

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

分析:
两/平均成绩----数量----用聚合函数---要分组
不及格---比较---用筛选
有没有可能没有学学科,所有不用统计出来---内连接
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导致会重复,导致语法错误

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

分了组只会出现一行数据

 

SELECT s.sid,
s.sname,avg(sc.score) n
from
t_mysql_student s,
t_mysql_score sc
where s.sid=sc.sid
and sc.score<60
GROUP BY s.sid,
s.sname

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

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

找张三老师教了那些课程  
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

 

 

10)查询没有学全所有课程的同学的信息

分析:
没有学全---一共三门,有可能学了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)

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

分析:

需要的表:
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 = '张三'

15)查询各科成绩最高分、最低分和平均分:
以如下形式显示:课程 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.mzph.cn/news/604757.shtml

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

相关文章

模拟实现strlen函数的三种方法

本文介绍&#xff1a;模拟实现strlen函数的三种方法&#xff08;指针相减&#xff0c;计数器&#xff0c;递归&#xff09; 自我介绍&#xff1a;一个脑子不好的大一学生&#xff0c;c语言接触还没到半年&#xff0c;若涉及到效率等问题&#xff0c;各位都可以在评论区提出见解…

解决Typescript报错问题[亲测有效]

目录 1、安装 2、报错 3、分析 4、三种更新途径 如果你tsc -v报错&#xff0c;请看这篇文章&#xff0c;本人亲测有效&#xff01; 1、安装 在前端项目中使用TS&#xff0c;需要进行安装&#xff0c;命令为&#xff1a;npm install -g typescript 查看TS版本&#xff1a; …

网关Gateway

什么是网关? 网关实质上是一个网络通向其他网络的 IP 地址&#xff0c;是当前微服务项目的"统一入口"。 网关能做什么&#xff1f; 反向代理 、鉴权、 流量控制、 熔断、 日志监控等 图片原文&#xff1a;http://t.csdnimg.cn/SvUJh 核心概念 Router&#xff08;…

vue3知识盲点总结

1 ref既可以定义基本数据类型&#xff0c;也可以定义对象数据类型。ref在使用watch的时候没有默认deep 为true&#xff0c;react定义的对象类型数据在使用watch的时候默认是开启的deep为true的。 2 ref为对象重新赋值的时候不会失去响应式的&#xff0c;而reactive重新…

AArch64 memory management学习(一)

提示 该博客主要为个人学习&#xff0c;通过阅读官网手册整理而来&#xff08;个人觉得阅读官网的英文文档非常有助于理解各个IP特性&#xff09;。若有不对之处请参考参考文档&#xff0c;以官网参考文档为准。AArch64 memory management学习一共分为两章&#xff0c;这是第一…

GD32 支持IAP的bootloader开发,使用串口通过Ymodem协议传输固件(附代码)

资料下载: https://download.csdn.net/download/wouderw/88714985 一、概述 关于IAP的原理和Ymodem协议&#xff0c;本文不做任何论述&#xff0c;本文只论述bootloader如何使用串口通过Ymodem协议接收升级程序并进行IAP升级&#xff0c;以及bootloader和主程序两个工程的配置…

LeetCode每日一题.07(整数反转)

给你一个 32 位的有符号整数 x &#xff0c;返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31 − 1] &#xff0c;就返回 0。 假设环境不允许存储 64 位整数&#xff08;有符号或无符号&#xff09;。 示例 1&#xff1a; 输…

【算法提升】LeetCode每五日一总结【01/01--01/05】

文章目录 LeetCode每五日一总结【01/01--01/05】2023/12/31今日数据结构&#xff1a;二叉树的前/中/后 序遍历<非递归> 2024/01/01今日数据结构&#xff1a;二叉树的 前/中/后 序遍历 三合一代码<非递归>今日数据结构&#xff1a;二叉树的 前/中/后 序遍历 三合一代…

Windows系统任务栏应用图标显示成空白的解决方案

背景 任务栏应用图标为空白&#xff1a; 原因 Windows系统为了加快系统响应速度&#xff0c;在安装完应用第一次显示完应用图标后&#xff0c;会将应用的图标放入缓存中&#xff0c;以后每次显示应用直接在缓存中获取&#xff0c;如果缓存中的图标信息发生错误&#xff0c;…

09-责任链模式-C语言实现

责任链模式&#xff1a;Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request.Chain the receiving objects and pass the request along the chain until an object handles it.&#xff08;使多个对象都有…

Java学习苦旅(二十三)——二叉搜索树

本篇博客将详细讲解二叉搜索树。 文章目录 二叉搜索树概念操作查找插入删除 性能分析 结尾 二叉搜索树 概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: 若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根…

java数据结构与算法刷题-----LeetCode64. 最小路径和

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 很多人觉得动态规划很难&#xff0c;但它就是固定套路而已。其实动态规划只…

最新ChatGPT网站系统源码+详细搭建部署教程+Midjourney绘画AI绘画

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作Ch…

CogVLM多模态大模型训练代码详细教程(基于vscode调试与训练)

文章目录 前言一、cogvlm环境安装1、apex问题2、en_core_web_sm问题 二、launch.json文件配置1、finetune_cogvlm_lora.sh被配置内容2、launch.json文件配置3、debug调试展示 三、训练源码解读1、权重问题2、数据问题3、训练模型参数修改4、训练源码解读5、训练结果展示 前言 …

认识Git

&#x1f30e;初识Git 初识Git 什么是Git Git的安装       Centos平台安装Git       Ubuntu平台安装Git Git的基本操作       创建远程仓库       配置Git 认识工作区、暂存区与版本库       添加文件到暂存区       将暂存区文件提交至本…

weak_ptr如何能做到解决循环引用又能传递参数呢?

引子&#xff1a;今天在看CLR via C#的时候看到C#的垃圾回收算法--引用跟踪算法的时候想到以下几个问题。 一、引用计数法存在的问题 一般引用计数法存在的问题就是不好处理循环引用的问题&#xff0c;但是C不是有weak_ptr吗&#xff1f; 这个引用跟踪的垃圾回收算法看起来还…

MySQL忘记密码,如何重置密码(Windows)

1. 停止MySQL服务 打开“服务”管理工具&#xff08;可以在开始菜单搜索“服务”或运行 services.msc&#xff09;。 找到你的MySQL服务&#xff0c;可能叫别的&#xff0c;但是应该都是mysql开头的。 鼠标右键停止运行它。 2. 跳过权限表启动 MySQL 打开命令提示符&#x…

HTML5 新元素

新多媒体元素 标签描述<audio>定义音频内容<video>定义视频&#xff08;video 或者 movie&#xff09;<source>定义多媒体资源 <video> 和 <audio><embed>定义嵌入的内容&#xff0c;比如插件。<track>为诸如 <video> 和 <…

理论U2 贝叶斯决策理论

文章目录 一、概率统计理论基础1、乘法公式2、全概率公式3、贝叶斯公式 二、贝叶斯决策理论1、用处2、解决问题3、决策基础4、一些概念5、核心公式 三、最小错误率贝叶斯决策1、目标2、例题分析3、问题1&#xff09;决策的风险 四、最小风险贝叶斯决策1、背景2、基本概念1&…

西电期末1034.勒让德多项式

一.题目 二.分析与思路 带递推式即可&#xff0c;注意数据类型的使用和转换&#xff01; 三.代码实现 #include<bits/stdc.h>//万能头 int main() {int n;double x;scanf("%d%lf",&n,&x);double ans0;double num[n];num[0]1;num[1]x;//初始化ansnum…