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语句中的聚合函数进行了讲解,便于理解和复习。文章部分内容源自网络,如有侵权,请联系作者删除,谢谢!

相关推荐
烬羽13 分钟前
给 Agent 一个检索式记忆:把对话历史存进 Milvus,该记的都记得
javascript·数据库·agent
星云API技术支持21 分钟前
企业微信二次开发外部群:群聊数据与联系人信息如何建立关联
数据库·php·企业微信
我不是程序员三三23 分钟前
桌面管理软件哪个最好?从一次上线翻车事故,拆解选型评估与配置落地全流程
数据库
落木萧萧82526 分钟前
MyBatis 关联查询的四种写法,为什么最后都变回了手写 XML
java·数据库·后端
春风解人意31 分钟前
从零开始学习嵌入式P35----数据库
数据库·嵌入式硬件·学习
sunoo-22933 分钟前
【网络编程 + 数据库】select 与 epoll 核心区别详解 + SQLite 入门到 C 接口全攻略
linux·网络·数据库·vscode·学习·sqlite
TDengine (老段)34 分钟前
TDengine 错误处理 — 错误码、异常传播、故障恢复
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
zbyyd37 分钟前
Linux 系统编程 :select/epoll 多路复用与 SQLite 数据库实战
linux·数据库·sqlite
俊昭喜喜里38 分钟前
c#中的构造函数
开发语言·数据库·c#
养生技术人1 小时前
Oracle OCP认证考试题目详解082系列第17题
运维·数据库·sql·oracle·ocp