sql倒序排列取第一条_从零学会SQL·三——汇总分析

一、常用汇总函数的练习

35c0e3efb30a592df7c9256ef3bdb5a7.png
score表

问题:

  • 查询课程编号为“0002”的总成绩
  • 查询选了课程的学生人数
  • 查询学号为“0001”的学生的最高分、最低分和平均分

解答SQL语句如下:

-- 查询课程编号为“0002”的总成绩
SELECT 学号,SUM(成绩)FROM score WHERE `课程号`='0002';-- 查询选了课程的学生人数
SELECT COUNT(DISTINCT 学号)FROM score WHERE `课程号` IS NOT NULL;-- 查询学号为“0001”的学生的最高分
SELECT 学号,MAX(成绩),MIN(成绩),AVG(成绩)FROM score WHERE `学号`='0001';

二、分组练习

467aa9aa45bdde69bc3494e82136b342.png
student表

35c0e3efb30a592df7c9256ef3bdb5a7.png
score表

问题:

  • 查询各科成绩的最高分和最低分
  • 查询每门课程被选修的学生数
  • 查询男生、女生的人数

解答SQL语句如下:

-- 查询各科成绩的最高分和最低分
SELECT 课程号,MAX(成绩),MIN(成绩)FROM score GROUP BY `课程号`;-- 查询每门课程被选修的学生数
SELECT 课程号,COUNT(DISTINCT 学号)FROM score GROUP BY `课程号`;-- 查询男生、女生的人数
SELECT 性别,COUNT(DISTINCT 性别)FROM student GROUP BY `性别`;

三、给分组结果指定条件的练习

467aa9aa45bdde69bc3494e82136b342.png
student表

35c0e3efb30a592df7c9256ef3bdb5a7.png
score表

问题:

  • 查询平均成绩大于60分学生的学号和平均成绩
  • 查询至少选修两门课程的学生学号
  • 查询姓名相同的学生名单并统计同名人数

解答:

SQL语句如下:

-- 查询平均成绩大于60分学生的学号和平均成绩
SELECT 学号,AVG(成绩) AS 平均成绩FROM score GROUP BY `学号`HAVING AVG(`成绩`)>60;-- 查询至少选修两门课程的学生学号
SELECT 学号,COUNT(课程号) AS 选修课程数FROM score GROUP BY `学号`HAVING COUNT(`课程号`)>=2;-- 查询姓名相同的学生名单并统计同名人数
SELECT 姓名,COUNT(姓名) AS 同名人数 FROM student GROUP BY `姓名` HAVING COUNT(`姓名`)>=2;

四、用SQL解决业务问题的解题思路

35c0e3efb30a592df7c9256ef3bdb5a7.png
score表

问题:

查询出平均成绩在80分及以上的课程,并写出分析思路。

解答:

  1. 第一步,翻译问题,理解问题

求出每一门课程的平均成绩,然后选出平均成绩在80分及以上的课程

2. 第二步,明确分析思路

96104bb8967674307d1e0dce896bcc90.png
分析思路

3. 第三步,写SQL语句

-- 查询出平均成绩在80分及以上的课程,并写出分析思路
SELECT 课程号,AVG(成绩) AS 平均成绩	-- 第四步:查询结果显示课程号,平均成绩FROM score 	-- 第一步:从score表中查找数据GROUP BY `课程号`	-- 第二步:按课程号分组HAVING AVG(`成绩`)>=80;	-- 第三步:给分组结果指定条件为平均成绩>=80

五、排序练习

35c0e3efb30a592df7c9256ef3bdb5a7.png
score表

问题:

写出下列问题对应的SQL语句,并画出运行顺序

  1. 查询不及格的课程,并按课程号从大到小排列
  2. 查询每门课程的平均成绩,结果按平均成绩升序排序;平均成绩相同时,按课程号降序排序
  3. 查询课程编号为“0003”且成绩>=80的学生学号,结果按按分数降序排列
  4. 统计每门课程的学生选修人数(超过2人的课程才统计),要求输出课程号和选修人数,查询结果按人数降序排序,若人数相同,按课程号升序排序
  5. 查询至少两门课程成绩优秀的同学学号及其成绩优秀的课程的平均成绩

解答:

题1~4答案:

-- 查询不及格的课程,并按课程号从大到小排列
SELECT 课程号,成绩	-- 第三步,查询出成绩<60分的课程号和成绩FROM score -- 第一步,从score表中查询数据WHERE `成绩`<60	-- 第二步,查询条件是成绩<60分
ORDER BY `课程号` DESC;	-- 第四步,对查询结果按课程号降序排序/*查询每门课程的平均成绩,结果按平均成绩升序排序;
平均成绩相同时,按课程号降序排序*/
SELECT 课程号,AVG(成绩) AS 平均成绩	-- 第三步,对分组后的课程计算每门课程的平均成绩,并把列名“AVG(成绩)”命名为“平均成绩”FROM score 	-- 第一步,从score表中查询数据GROUP BY `课程号`	-- 第二步,按课程号分组
ORDER BY 平均成绩 ASC ,`课程号` DESC ;	-- 第四步,按照课程的平均成绩升序排序,当平均成绩相同时按照课程号降序排序-- 查询课程编号为“0003”且成绩>90的学生学号,结果按按分数降序排列
SELECT 学号,成绩	-- 第三步,查询结果显示学号和成绩FROM score 	-- 第一步,从score表中查询数据WHERE `课程号`='0003' AND `成绩`>=80	-- 第二步,查询条件是课程号为0003并且成绩>=80
ORDER BY `成绩` desc ;	-- 对查询结果按照成绩进行倒序排序/*统计每门课程的学生选修人数(超过2人的课程才统计),
要求输出课程号和选修人数,查询结果按人数降序排序;若人数相同,按课程号升序排序*/
SELECT 课程号,COUNT(学号) AS 选修人数	-- 第四步,查询结果显示课程号和“COUNT(学号)”,并把“COUNT(学号)”命名为“选修人数”FROM score 	-- 第一步,从score表中查询数据GROUP BY `课程号`	-- 第二步,按照课程号分组HAVING COUNT(`学号`)>2	-- 给分组指定条件,选修该课程超过2人
ORDER BY 选修人数 DESC ,`课程号` ASC ;	-- 对查询结果按照选修人数进行倒序排序,如果选修人数相同,则按照课程号进行升序排序

题5较为复杂,下面详细解答:

(1)翻译题目,理解题目

先将题目逐个拆解:

查询“至少两门”“课程成绩优秀”的【同学学号】及其“成绩优秀的课程”的【平均成绩】

也就是:

  1. 需要查询的字段是【学号】和【平均成绩】
  2. 【学号】的限制条件是“课程成绩优秀”,“课程成绩优秀”的限制条件是“至少两门”,“平均成绩”的限制条件是“成绩优秀的课程”

(2)确定分析思路

  1. 第一步:得到每个学生的平均成绩,查询结果显示学号和平均成绩

select -- 查询结果:学号,avg(成绩) as 平均成绩

from -- 从哪张表查找数据:score

where -- 限制条件:没有

group by -- 分组:按学号分组

having --给分组指定条件:没有

order by -- 排序:没有

limit -- 指定行数:没有

查询语句如下:

SELECT 学号,AVG(成绩) AS 平均成绩FROM score GROUP BY `学号`;

2. 第二步:加上限制条件

① 给“学号”加上“课程成绩优秀”——查询限制条件where

② 给“平均成绩”加上“成绩优秀的课程”——查询限制条件where

③ 给“课程成绩优秀”加上“至少2门”——在查询限制条件where的基础上给分组指定条件having

select -- 查询结果:学号,avg(成绩) as 平均成绩

from -- 从哪张表查找数据:score

where -- 限制条件:成绩>=90

group by -- 分组:按学号分组

having --给分组指定条件:count(课程号)>=2

order by -- 排序:没有

limit -- 指定行数:没有

查询语句如下:

SELECT 学号,AVG(成绩) AS 平均成绩FROM score WHERE `成绩`>=90GROUP BY `学号`HAVING COUNT(`课程号`)>=2;

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

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

相关文章

2017 软件开发薪酬调查:Go 和 Scala 是最赚钱的语言

英文&#xff1a;codeburst&#xff0c;编译&#xff1a;oschina www.oschina.net/news/87499/go-scala-are-the-most-lucrative-languages 每年 O’Reilly 都会发布其年度开发者的调查结果。这项调查涵盖了来自世界 110 个国家的近 7000 名程序员。这里摘几个亮点&#xff1a;…

bootstrap grid php,bootstrap grid用法

bootstrap grid的用法&#xff1a;首先使用container来包裹div&#xff1b;然后在div里面设置行&#xff1b;接着设置列能够快速对这个框架进行搭建&#xff1b;最后通过拖拽浏览器来改变宽窄即可。本文操作环境&#xff1a;Windows7系统、bootstrap3、Dell G3电脑。bootstrap的…

js map对象遍历_前端测试题:有关于js中跨域请求的说法,错误的是?

考核内容:javascript 跨域的使用题发散度: ★试题难度: ★解题思路:什么是跨域&#xff1f;跨域是指一个域下的文档或脚本试图去请求另一个域下的资源&#xff0c;这里跨域是广义的。什么是同源策略&#xff1f;同源策略/SOP(Same origin policy)是一种约定&#xff0c;由Netsc…

[转]快速清除SQL Server日志的两种方法

日志文件满而造成SQL数据库无法写入文件时&#xff0c;可用两种方法&#xff1a; 第一种方法&#xff1a;清空日志。 1.打开查询分析器&#xff0c;输入命令 以下是引用片段&#xff1a; DUMP TRANSACTION 数据库名 WITH NO_LOG 2.再打开企业管理器--右键你要压缩的数据库--所…

管理信息系统案例分析_「案例」MES系统助力华联电子仓库工作人员效率提高30%...

一、企业简介厦门华联电子股份有限公司成立于1984年&#xff0c;注册资金12929万元&#xff0c;现有自主厂房8万平方米&#xff0c;全自动化生产线40多条&#xff0c;员工2400余人&#xff0c;是国内最具规模的智能控制器、光电子器件的生产厂家之一。企业集研发、生产、销售和…

php拖拽原理,JS拖拽原理

实例html>拖拽#ball {width: 50px;height: 50px;background-color: lightpink;border-radius: 50%;box-shadow: 2px 2px 1px #888;position: absolute;}// onmousedown: 选择, onmouseover: 移动, onmouseup:放下//找到小球的位置:// 当前鼠标到小球边沿的距离相对是不变的,…

数学系学生的漫画,治愈了整个朋友圈

如何在无趣的世界里&#xff0c;做一个有趣的人&#xff1f; 有时候&#xff0c;无厘头、无意义、有趣性&#xff0c;胜过一切宏大叙事。 “此人脑洞开得很大&#xff0c;且深不见底。”这是网友对tango的描述。 对于画家tango的作品&#xff0c;大家并不陌生&#xff0c;最近他…

孟岩谈Erlang:并行计算和云计算

孟岩谈Erlang&#xff1a;并行计算和云计算 ——写在《Erlang程序设计》出版之际 Erlang算不上是一种“大众流行”的程序设计语言&#xff0c;而且即使是Erlang的支持者&#xff0c;大多数也对于Erlang成为“主流语言”并不持乐观态度。然而&#xff0c;自从2006年以来&#xf…

php获取域名方法,PHP实现获取域名的方法小结

文章主要介绍了PHP实现获取域名的方法,实例总结了常见的获取域名的方法,非常具有实用价值,需要的朋友可以参考下。方法一(用 系统变量)复制代码 代码如下://缺点不使用传递过来的地址和不支持系统变量的主机echo $_SERVER[HTTP_HOST];方法二(用自带函数)复制代码 代码如下:$url…

python 日期格式校验_python – 如何验证时间格式?

这就是我到目前为止,它可能完全是垃圾.我想要做的是验证caminput1,以便格式为HH&#xff1a;MM&#xff1a;SS.哈希是从我测试时开始的.def cameraspeedcheck():timeformat ("%H:%M:%S")caminput1 input("At what time did sensor 1 actuate? ")# is ca…

逻辑回归算法背后的数学

看完Andrew Ng老师的机器学习公开课后&#xff0c;对于逻辑回归部分&#xff0c;打算写篇学习笔记记录总结一下&#xff0c;也和大家共同分享。 1 基本思能 逻辑回归&#xff08;Logistic Regression&#xff09;和线性回归&#xff08;Linear Regression&#xff09;的模型和原…

配置DNS辅助服务器:DNS系列之四

配置DNS辅助服务器在前面的博文中&#xff0c;我们介绍了如何在DNS服务器中创建常用的DNS记录&#xff0c;本文中我们要为大家介绍如何配置DNS的辅助服务器&#xff0c;同时也要介绍一下和辅助区域类似的存根区域。DNS辅助服务器是一种容错设计&#xff0c;考虑的是一旦DNS主服…

笑出腹肌的程序猿搞笑趣图

客户需求 vs 最终产品 requirements vs. implementation 程序员的一天 The Programmers life 寂寞的时候干什么&#xff1f; 写程序写程序写程序 失恋的时候干什么&#xff1f; 写程序写程序写程序 发骚的时候干什么&#xff1f; 写程序写程序写程序 剩下的时候干什么&#xff…

Java图形 图像与多媒体基础,十一. 图形、图像与多媒体1.绘图基础

要在平面上显示文字和绘图&#xff0c;首先要确定一个平面坐标系。Java语言约定&#xff0c;显示屏上一个长方形区域为程序绘图区域&#xff0c;坐标原点(0,0)位于整个区域的左上角。一个坐标点(x,y)对应屏幕窗口中的一个像素&#xff0c;是整数。如图12.1所示。窗口大小由超文…

郁闷

学校机子坏了 搞了一晚上……转载于:https://blog.51cto.com/zmdzhangzhe/109206

matlab范德蒙,matlab有效生成范德蒙多矩阵

《matlab有效生成范德蒙多矩阵》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《matlab有效生成范德蒙多矩阵(7页珍藏版)》请在人人文库网上搜索。1、有很多线性代数问题都需要生成范德蒙多矩阵&#xff0c;对于一个向量x,它的范德蒙多矩阵具有如下的形式:Vx1m x1(m-1…

程序员快来看!经典代码替你省去多少时间?

作为一名程序员&#xff0c;每天坐在电脑前敲敲打打那些重复重复再重复的语句&#xff0c;习惯性的思维总是被套进去&#xff0c;有些时候很容易把简单的事情想复杂了&#xff01;不过&#xff0c;我们反其道而行之&#xff0c;新手们只要是把下面的语句牢记&#xff0c;很多情…

python如何使用geotools_基于GeoTools实现道路结点的提取

最近公司的地图业务数据换了供应商&#xff0c;由于在进行路径规划的时候需 要使用到道路结点进行图的构建&#xff0c;因而需要根据道路图层提取出道路的节点。因为经常使用arcpy&#xff0c;所以先用python写了个版本&#xff0c;通常将数据放在地理数据库中会有更高的运行效…

VMware:为中国中小企业建立“外部云计算”

在11月4日举行的VMware 2008用户大会上&#xff0c;记者了解到&#xff0c;VMware正在致力为中小企业提供“外部云计算”平台。据VMware公司大中华区技术总监张振伦介绍&#xff0c;目前云计算是最受用户关注的理念之一&#xff0c;这样的计算到底怎么实现&#xff0c;怎么落地…

php中sql删除,学习猿地-php sql删除语句是什么

php sql删除语句是“DELETE FROM”&#xff0c;该语句用于从数据库表中删除行&#xff0c;其语法是“DELETE FROM table_name WHERE column_name some_value”。PHP MySQL Delete FromDELETE FROM 语句用于从数据库表中删除行。删除数据库中的数据DELETE FROM 语句用于从数据库…