文章目录

  • 1.数据准备
  • 2.聚集函数
  • 3.分组查询
    • 3.0分组查询基本语法
    • 3.1 SELECT后面语句的要求
    • 3.2.GROUP BY到底怎么分组的
    • 3.3.WHERE 和HAVING的区别
    • 3.4.NULL对分组的影响

  本机环境 Win10 ,MySQL8,图形操作工具MySQL WorkBench。

1.数据准备

  创建一个教师表,里面含id,name,salary,subject,campus字段。特别地,subject表示老师教授的学科,仅限制在数学,英语,语文;campus表示校区,仅限制在 A B C 校区。

详情创建信息见下面


# 建库
create database mysql_basis_view;# 指定库
use mysql_basis_view;# 创建一个学校的教师表 (不考虑严谨性)
CREATE TABLE teacher(id INT PRIMARY KEY,           # 员工id 设为主键`name` VARCHAR(20) NOT NULL,  # 员工姓名  不能为nullsalary INT NOT NULL,          # 员工工资 不能为null`subject` VARCHAR(20),        # 员工教授学科campus VARCHAR(20)            # 员工所在校区
);INSERT INTO teacher VALUES
(1,'段誉',1000,'数学','A'),
(2,'虚竹',1500,'英语','A'),
(3,'萧峰',3200,'数学','A'),
(4,'王语嫣',2000,'英语','A'),(5,'郭靖',2000,'数学','B'),
(6,'黄蓉',2000,'语文','B'),
(7,'华筝',1500,'英语','B'),
(8,'杨康',1000,'语文','B'),
(9,'穆念慈',1000,'数学','B'),(10,'杨过',1200,'数学','C'),
(11,'小龙女',1700,'语文','C'),
(12,'李莫愁',1250,'英语','C'),
(13,'尹志平',1000,'语文','C')
;

结果

2.聚集函数

  聚集函数主要是如下几类,详细作用见表:

函数 作用
count 用于统计行数
min 查询最小值
max 查询最大值
avg 计算平均值(仅对数字有效)
sum 计算总和(仅对数字有效)

  其中,sum 和 avg 只针对数字有效,而其他的如 min ,除了对数字有效以外,对其他数据类型也有效,比如字符串。但通常来说,这些聚集函数用于数字的场景更广泛

e.g

查询A校区的所有人的平均工资

SQL

SELECT AVG(salary) AS campusA_avgsal
FROMteacher
WHEREcampus = 'A';

结果

事实上,聚集函数通常与分组查询一起使用。

3.分组查询

3.0分组查询基本语法

  分组查询的基本语法如下:

SELECT a,b,....,n  # 字段或聚集函数
FROM若干表
WHERE分组前筛选条件
GROUP BYx,y,.... n
HAVING 分组后筛选条件

3.1 SELECT后面语句的要求

  SELECT 后面出现只能是聚集函数或者必须是在GROUP BY 后面出现的字段

因为GROUP BY的作用就是根据字段对数据进行分组,而属于同一个组的每一个成员的特有属性对于整个组而言并没有意义(1)。

假设我按照校区分组

原始数据

分组后

而如果仅简单地分个组,那就太没有意思了。我们重点是想对每个组进行诸如求平均薪资的计算,而计算的工作就交给了聚集函数 (2)。

上面的1和2点其实就说明了为什么SELECT后面只出现聚集函数或是仅在GROUP BY 后面出现的字段。

e.g

查询每个校区的平均工资。

SQL

SELECT AVG(salary) AS avg_sal, campus
FROMteacher
GROUP BY campus;

结果

3.2.GROUP BY到底怎么分组的

  分组条件可能不止一个,假设GROUP BY 后面有 a,b两个字段,那么当且仅当a,b个字段都相等的数据才能划分一个组

e.g

计算每个校区中每个学科的教授老师的平均工资。

SQL

SELECT AVG(salary) AS avg_sal, campus, `subject`
FROMteacher
GROUP BY campus , `subject`;

图解过程

3.3.WHERE 和HAVING的区别

  首先需要知道查询语句的执行顺序如下:

WHERE是在分组前,对已有的数据进行筛选,HAVING是在分组后,对分组后的数据进行筛选

e.g

计算不是C校区的每个校区的每个学科的教师平均工资,然后从中选取平均工资大于2000的校区,学科,平均工资。

SQL

SELECT campus, subject, AVG(salary) AS avg_sal
FROMteacher
WHEREcampus <> 'C'
GROUP BY campus , subject
HAVING AVG(salary) > 2000;

图解过程

结果

3.4.NULL对分组的影响

  min max avg sum 函数 忽略掉 null的计算。为了便于理解,我们向表中新增几条数据,其中一条洪七公的工资设置为null。(注意,之前设置工资不为null,所以首先需要设置工资为null)

# 设置 salary工资可以为null
alter table teacher modify column salary int;INSERT INTO teacher VALUES
(14,'黄药师',2500,'武术','D'),
(15,'欧阳锋',2500,'武术','D'),
(16,'洪七公',null,'武术','D'),
(17,'段智兴',2500,'武术','D');

结果

以avg验证 D校区全体员工的平均工资,如果工资是2500,则证明忽略掉了含null的数据。

SELECT AVG(salary) AS avg_sal
FROMteacher
WHEREcampus = 'D';

结果

这说明的确是忽略了 含 null的数据。

不过这里需要说明的是,count(*)不管是不是null的数据都会统计,它的作用是用来统计条目数。


SELECT count(*)
FROMteacher
WHEREcampus = 'D';

结果

而count(XXX字段)也是会忽略掉null的。

SELECT count(salary)
FROMteacher
WHEREcampus = 'D';

结果

完结撒花!!!

【MySQL基础攻难1】聚集函数和分组查询相关推荐

  1. Mysql进阶学习(四)分组函数与分组查询

    Mysql进阶学习(四)分组函数与分组查询 一.进阶4:分组函数 1.简单的使用 1.1 SUM 求和 1.2 AVG 求平均值 1.3MIN 最小值 1.4 MAX 最大值 1.5 COUNT求总数 ...

  2. mysql 分组链接_MySQL学习笔记(四)——分组函数,分组查询,链接查询

    MySQL学习笔记(四)--分组函数,分组查询,链接查询 做者:就叫易易好了 日期:2020/11/18 1.分组函数 功能:用做统计使用,又称为聚合函数或统计函数mysql 分类:web sum函数 ...

  3. MySQL学习笔记(四)——分组函数,分组查询,连接查询

    MySQL学习笔记(四)--分组函数,分组查询,连接查询 作者:就叫易易好了 日期:2020/11/18 一.分组函数 功能:用作统计使用,又称为聚合函数或统计函数 分类: sum函数 avg函数 m ...

  4. SQL语法之分组函数,分组查询(进阶5)and连接查询(sql92语法进阶6)

    SQL语法体系学习笔记 SQL语法之基础查询(进阶1)and条件查询(进阶2) SQL语法之排序查询(进阶3)and常见函数(进阶4) SQL语法之分组函数,分组查询(进阶5)and连接查询(sql9 ...

  5. MySQLi学习笔记 :二(  排序查询,聚合函数,分组查询,分页查询) 约束     多表之间的关系   范式     数据库的备份和还原

    # DQL:查询语句     1. 排序查询         * 语法:order by 子句             * order by 排序字段1 排序方式1 ,  排序字段2 排序方式2... ...

  6. SQL语句——分组函数和分组查询

    分组函数和分组查询 一.分组函数 1.使用 2.注意 (1)null (2)count(*)和count(具体字段)的区别 (3)分组函数不能直接使用在where子句中 (4)所有分组函数可以组合起来 ...

  7. JavaWeb - 数据库,MySQL安装卸载,MySQL服务器存储结构,sql语言,使用sql操作数据库/数据库表/表中记录,聚集函数,分组操作,limit关键字,重置root密码

    转载请注明出处:https://blog.csdn.net/mythmayor/article/details/72781451 1.数据库的简介 (1)什么是数据库,就是一个文件系统,使用标准sql ...

  8. SqlService基础一篇搞定(建库建表、插入数据、修改和删除数据、基础查询、条件查询、模糊查询、聚合函数、分组查询、多表查询)

    SqlService基础知识总汇 前言 一.SQLSERVER建库建表 1.检查数据库名是否存在 2.创建数据库 3.建表 4.修改表结构 5.删除添加约束 二.SQLSERVER插入数据 1.向部门 ...

  9. Mysql数据库的条件查询(聚合函数、分组查询)

    Mysql数据库的条件查询 一.聚合函数 1.聚合函数的介绍 聚合函数又叫组函数,通常是对表中的数据进行统计和计算,一般结合分组(group by)来使用,用于统计和计算分组数据. 常用的聚合函数: ...

最新文章

  1. HTML5的学习,各个标签的尝试
  2. php 数组 添加元素、删除元素
  3. Linux内核之浅谈内存寻址
  4. java 获得天气预报信息
  5. codeforce A - Sequence with Digits
  6. 关闭笔记本显示器指定组合键才能打开_笔记本外接显示器怎么设置 笔记本外接显示器设置方法【详解】...
  7. 【数据库系统概论】考研第三部分重点分析【3.1】
  8. JavaScript变量和作用域
  9. 谷歌最强NLP模型BERT官方代码来了!GitHub一天3000星
  10. 装饰器模式 decorator
  11. linux etc/init 与etc/init.d的区别
  12. DWZ (JUI) 教程 dwz框架 刷新dialog解决方案
  13. 如何实现用串口助手实时绘制16位数据波形图
  14. Androidd 高德地图功能系列开发(搜索模块)
  15. uni-app教程支付php,uni-app IOS app微支付、支付宝整合记录
  16. linux系统出现BUG:softlockup- CPU#0 STUCK FOR 23s 或 rcu_sched self-detected stall on cpu 等字样的解决办法
  17. epub格式电子书剖析之三:NC…
  18. java面试常问问题及答案,附源代码
  19. 5个人审查5开源视频聊天工具
  20. AI围棋学习之路一----棋盘和落子的类构建

热门文章

  1. iosetup mysql_InnoDB:Error:io_setup()failedwithEAGAIN
  2. 2.阿里实人认证 .net 准备工作2 转换demo
  3. 【ultraedit编辑器中怎么取消文件自动备份】
  4. 修改自己电脑连接的路由器的配置网址192.168.1.1
  5. 中招报名网站服务器错误,中考报名显示密码错误 中考网上报名说我密码错误怎么办...
  6. Gos —— 启动分页机制
  7. 安卓Andriod使用入门(十九)【网络视频播放器】
  8. 收到FRDM-KL02Z
  9. SAP S4 FI后台详细配置教程- PART1 (通用配置及基础架构篇)
  10. QT全自动检测,挂载U盘