MySQL 基础知识(4) 聚合函数

目录

一、聚合函数

1.定义

2.类型

3.语法介绍

(1)AVG和SUM函数

(2)MIN和MAX函数

(3)COUNT函数

[二、GROUP BY](#二、GROUP BY)

1.基本使用

2.使用多个列分组

三、HAVING

1.基本使用

2.WHERE和HAVING的对比

(1)区别1:

(2)区别2:

四、SELECT的执行过程

1.查询的书写结构方式

(1)方式一:

(2)方式二:

(3)说明

2.查询的执行结构方式

总结


一、聚合函数

1.定义

聚合函数作用于一组数据,并对一组数据返回一个值。

2.类型

AVG()、 SUM() 、MAX() 、MIN() 、COUNT()

3.语法介绍

(1)AVG和SUM函数

可以对数值型数据使用AVG 和 SUM 函数。

sql 复制代码
SELECT AVG(grade), MAX(grade),MIN(grade), SUM(grade)
FROM   students
WHERE  student_id LIKE '%s%';

(2)MIN和MAX函数

可以对任意数据类型的数据使用 MIN 和 MAX 函数。

sql 复制代码
SELECT MIN(age), MAX(age)
FROM   students;

(3)COUNT函数

COUNT(*)返回表中记录总数,适用于任意数据类型。

sql 复制代码
SELECT COUNT(*)
FROM   students
WHERE  classnumber = 2;

COUNT(expr) 返回expr不为空的记录总数。

sql 复制代码
SELECT COUNT(grade)
FROM   subject
WHERE  subject_id = 1;
  • count(*)会统计值为 NULL 的行,而 count(列名)不会统计此列为 NULL 值的行。
  • 不要使用 count(列名)来替代 count(*),count(*)是 SQL92 定义的标准统计行数的语法,跟数据库无关,跟 NULL 和非 NULL 无关。

二、GROUP BY

1.基本使用

可以使用GROUP BY子句将表中的数据分成若干组

模板:

SELECT column, group_function(column)

FROM table

[WHERE condition]

[GROUP BY group_by_expression]

[ORDER BY column];

注意:

WHERE一定放在FROM后面,在SELECT列表中所有未包含在组函数中的列都应该包含在 GROUP BY子句中。

包含在 GROUP BY 子句中的列不必包含在SELECT 列表中。

sql 复制代码
SELECT   AVG(grade)
FROM     class
GROUP BY class_id ;

2.使用多个列分组

sql 复制代码
SELECT   class_id , student_id, SUM(grade)
FROM     employees
GROUP BY class_id, student_id ;

使用WITH ROLLUP关键字之后,在所有查询出的分组记录之后增加一条记录,该记录计算查询出的所有记录的总和,即统计记录数量。

注意:当使用ROLLUP时,不能同时使用ORDER BY子句进行结果排序,即ROLLUP和ORDER BY是互相排斥的。

sql 复制代码
SELECT class_id,AVG(grade)
FROM class
WHERE class_id > 5
GROUP BY class_id WITH ROLLUP;

三、HAVING

1.基本使用

过滤分组

  • 行已经被分组。
  • 使用了聚合函数。
  • 满足HAVING 子句中条件的分组将被显示。
  • HAVING 不能单独使用,必须要跟 GROUP BY 一起使用。
  • 非法使用聚合函数 : 不能在 WHERE 子句中使用聚合函数。
sql 复制代码
SELECT   class_id, MAX(grade)
FROM     students
GROUP BY class_id
HAVING   MAX(grade)>100;

2.WHERE和HAVING的对比

(1)区别1:

WHERE 可以直接使用表中的字段作为筛选条件,但不能使用分组中的计算函数作为筛选条件;

HAVING 必须要与 GROUP BY 配合使用,可以把分组计算的函数和分组字段作为筛选条件。

(2)区别2:

如果需要通过连接从关联表中获取需要的数据,WHERE 是先筛选后连接,而 HAVING 是先连接后筛选。


四、SELECT的执行过程

1.查询的书写结构方式

(1)方式一:

SELECT ...,....,...

FROM ...,...,....

WHERE 多表的连接条件

AND 不包含组函数的过滤条件

GROUP BY ...,...

HAVING 包含组函数的过滤条件

ORDER BY ... ASC/DESC

LIMIT ...,...

(2)方式二:

#方式2:

SELECT ...,....,...

FROM ... JOIN ...

ON 多表的连接条件

JOIN ...

ON ...

WHERE 不包含组函数的过滤条件

AND/OR 不包含组函数的过滤条件

GROUP BY ...,...

HAVING 包含组函数的过滤条件

ORDER BY ... ASC/DESC

LIMIT ...,...

(3)说明

  • from:从哪些表中筛选
  • on:关联多表查询时,去除笛卡尔积
  • where:从表中筛选的条件
  • group by:分组依据
  • having:在统计结果中再次筛选
  • order by:排序
  • limit:分页

2.查询的执行结构方式

FROM -> WHERE -> GROUP BY -> HAVING -> SELECT 的字段 -> DISTINCT -> ORDER BY -> LIMIT


总结

本篇对SQL语句中的聚合函数进行了讲解,便于理解和复习。文章部分内容源自网络,如有侵权,请联系作者删除,谢谢!

相关推荐
WangYaolove13145 分钟前
请解释Python中的装饰器是什么?如何使用它们?
linux·数据库·python
我是黄大仙26 分钟前
利用飞书多维表格自动发布版本
运维·服务器·数据库·飞书
曾经的三心草26 分钟前
Mysql之约束与事件
android·数据库·mysql·事件·约束
宋发元29 分钟前
如何使用正则表达式验证域名
python·mysql·正则表达式
WuMingf_33 分钟前
redis
数据库·redis
张某布响丸辣40 分钟前
SQL中的时间类型:深入解析与应用
java·数据库·sql·mysql·oracle
路遇晚风1 小时前
力扣=Mysql-3322- 英超积分榜排名 III(中等)
mysql·算法·leetcode·职场和发展
P.H. Infinity2 小时前
【RabbitMQ】10-抽取MQ工具
数据库·分布式·rabbitmq
zgscwxd2 小时前
thinkphp6 --数据库操作 增删改查
数据库·thinkphp6