-2、查询平均成绩大于60分的同学的学号和平均成绩;

Select StuId,Avg(Score) as AvgScore From tblScore
  Group By StuId
   Having Avg(Score)>60

我们扩展一下:查询平均成绩大于60分的同学的学号和平均成绩和学生的名字:

SELECT tblstudent.StuName,t1.* FROM tblstudent, (Select tblscore.StuId,Avg(tblscore.Score) avgScore From tblScore Group by tblScore.StuId having avgscore>60) T1-- 这里查出来的就是学生的平均成绩,并把查出来的结果集当做一张表T1来处理。WHERE t1.stuid=tblstudent.StuId

我们来学习一下什么是Group By 这个语法。其实就是聚合函数。

看到一个很好的博客,讲的很具体,如下:

----------------------------------------------------------------------------------------------------------------------------------------------

可以这样去理解group by和聚合函数(转http://www.cnblogs.com/wuguanglei/p/4229938.html?utm_source=tuicool)

写在前面的话:用了好久group by,今天早上一觉醒来,突然感觉group by好陌生,总有个筋别不过来,为什么不能够select * from Table group by id,为什么一定不能是*,而是某一个列或者某个列的聚合函数,group by 多个字段可以怎么去很好的理解呢?不过最后还是转过来了,简单写写吧,大牛们直接略过吧。

=========正文开始===========

  先来看下表1,表名为test:

表1

  执行如下SQL语句:

1
2
SELECT name FROM test
GROUP BY name

  你应该很容易知道运行的结果,没错,就是下表2:

表2

  可是为了能够更好的理解“group by”多个列“”聚合函数“的应用,我建议在思考的过程中,由表1到表2的过程中,增加一个虚构的中间表:虚拟表3。下面说说如何来思考上面SQL语句执行情况:

1.FROM test:该句执行后,应该结果和表1一样,就是原来的表。

2.FROM test Group BY name:该句执行后,我们想象生成了虚拟表3,如下所图所示,生成过程是这样的:group by name,那么找name那一列,具有相同name值的行,合并成一行,如对于name值为aa的,那么<1 aa 2>与<2 aa 3>两行合并成1行,所有的id值和number值写到一个单元格里面。

3.接下来就要针对虚拟表3执行Select语句了:

(1)如果执行select *的话,那么返回的结果应该是虚拟表3,可是id和number中有的单元格里面的内容是多个值的,而关系数据库就是基于关系的,单元格中是不允许有多个值的,所以你看,执行select * 语句就报错了。

(2)我们再看name列,每个单元格只有一个数据,所以我们select name的话,就没有问题了。为什么name列每个单元格只有一个值呢,因为我们就是用name列来group by的。

(3)那么对于id和number里面的单元格有多个数据的情况怎么办呢?答案就是用聚合函数,聚合函数就用来输入多个数据,输出一个数据的。如cout(id),sum(number),而每个聚合函数的输入就是每一个多数据的单元格。

(4)例如我们执行select name,sum(number) from test group by name,那么sum就对虚拟表3的number列的每个单元格进行sum操作,例如对name为aa的那一行的number列执行sum操作,即2+3,返回5,最后执行结果如下:

(5)group by 多个字段该怎么理解呢:如group by name,number,我们可以把name和number 看成一个整体字段,以他们整体来进行分组的。如下图

(6)接下来就可以配合select和聚合函数进行操作了。如执行select name,sum(id) from test group by name,number,结果如下图:

结束!

50个查询系列-第二个查询相关推荐

  1. 【SQL查询系列】子查询经典案例

    文章目录 前言 数据库 查询案例 1. 查询工资最低的员工信息: last_name, salary 2. 查询平均工资最低的部门信息 3. 查询平均工资最低的部门信息和该部门的平均工资 4. 查询平 ...

  2. 深入理解脚本化CSS系列第二篇——查询计算样式

    前面的话 元素的渲染结果是多个CSS样式博弈后的最终结果,这也是CSS中的C(cascade)层叠的含义.访问第一篇中的style属性只能获取行间样式,这通常来说,并不是我们想要的结果.本文将详细介绍 ...

  3. 数据库之 MySQL—— 50个查询系列

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一个项目涉及到的50个Sql语句 问题及描述: --1.学生表 Student(Sid,Sname,Sa ...

  4. Hive查询系列之初相识

    Hive查询系列之初相识 1 基本查询(select--from) 1.1 全表和特定列查询 0)数据准备 (0)原始数据 dept: 10 ACCOUNTING 1700 20 RESEARCH 1 ...

  5. 【SqlServer系列】子查询

    1.1  已发布[SqlServer系列]文章 [SqlServer系列]SQLSERVER安装教程 [SqlServer系列]数据库三大范式 [SqlServer系列]表单查询 [SqlServer ...

  6. 最常见的 SQL 查询错误 - 第二章节

    第二章节:非 SARGable 查询条件 像大多数编程人员一样,数据库开发人员或多或少倾向于编写直接翻译给定请求的代码.大多数编程语言(包括 SQL)被设计为更易于人们阅读,这也导致了一个问题.为什么 ...

  7. mysql 获取倒数第二_MySQL查询倒数第二条记录实现方法

    有时候会用到查询倒数第二条记录复制代码 代码如下:last=HolderChangeHistory.find_by_sql (["               SELECT * FROM h ...

  8. iPhone系列设备媒体查询:

    这就引出一个问题,我们在对iPhone设备适配时候,又多出几种情况.iPhone系列设备媒体查询: @media only screen and (min-device-width: 320px){/ ...

  9. 学习ASP.NET Core Razor 编程系列九——增加查询功能

    原文:学习ASP.NET Core Razor 编程系列九--增加查询功能 学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.N ...

最新文章

  1. jmeter实现多并发
  2. pyinstaller 打包成exe
  3. 在AFN中使用NSXMLParser解析服务器返回的XML数据
  4. 适合 Kubernetes 初学者的一些实战练习 (三)
  5. JAVA格式化当前日期或者取年月日
  6. C++中输入一组数字 以换行符结束输入
  7. 课程目标 线程 java 1615387415
  8. 爬虫爬评书吧_python scrapy+Mongodb爬取蜻蜓FM,酷我及懒人听书
  9. C# log4net纯代码设置参数
  10. CSS 字体风格 font-style属性
  11. linux界面唤醒,Linux计算机实现自动唤醒和关闭的方法步骤详解
  12. 运动目标跟踪(十三)--SRDCF/DeepSRDCF
  13. Android TextView 跑马灯滚动效果
  14. 索佳电子水准数据传输软件_安徽铜陵磁致伸缩式静力水准仪公司
  15. java 编写metro风格_纯Javascript实现Windows 8 Metro风格实现
  16. 15_Elasticsearch 内部原理详细解析(下篇)
  17. 几万条数据的excel导入到mysql_excel十几万行数据快速导入数据库研究(转,下面那个方法看看还是可以的)...
  18. File xxx specified for property 'resourceFile' does not exist.解决方法
  19. 计算机组成原理中阶符是什么,计算机组成原理习手册.doc
  20. Windows10 如何设置自定义开机音乐

热门文章

  1. 提高电路板EMC能力PCB设计和布线方法
  2. 第十六届智能车竞赛浙江赛区比赛胜利结束
  3. 2021年春季学期-信号与系统-第十五次作业参考答案-第二小题参考答案
  4. 使用WinSCP在WIndows与树莓派之间传递文件
  5. 第十五届全国大学生智能车全国总决赛获奖信息-华北赛区
  6. 如何实现MARKDOWN网页内跳转?
  7. QN8027性能调试
  8. pointcloud 转ptr_ROS学习笔记(三)sensor_msgs::LaserScan转pcl::PointCloud
  9. java 反射 慢在那里_Java 反射到底慢在哪?
  10. vue 定位所在地_vue系列教程之微商城项目|商品购买