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

相关推荐
瓯雅爱分享3 小时前
Java+Vue构建的采购招投标一体化管理系统,集成招标计划、投标审核、在线竞价、中标公示及合同跟踪功能,附完整源码,助力企业实现采购全流程自动化与规范化
java·mysql·vue·软件工程·源代码管理
BTU_YC5 小时前
Neo4j查询计划完全指南:读懂数据库的“执行蓝图“
数据库·neo4j
非极限码农5 小时前
Neo4j图数据库上手指南
大数据·数据库·数据分析·neo4j
mit6.8245 小时前
[C# starter-kit] 命令/查询职责分离CQRS | MediatR |
java·数据库·c#
咋吃都不胖lyh6 小时前
SQL-多对多关系
android·mysql·数据分析
苏打水com6 小时前
数据库进阶实战:从性能优化到分布式架构的核心突破
数据库·后端
莫叫石榴姐6 小时前
SQL百题斩:从入门到精通,一站式解锁数据世界
大数据·数据仓库·sql·面试·职场和发展
shan~~7 小时前
linux达梦数据库操作
linux·数据库·chrome
武文斌777 小时前
项目学习总结:LVGL图形参数动态变化、开发板的GDB调试、sqlite3移植、MQTT协议、心跳包
linux·开发语言·网络·arm开发·数据库·嵌入式硬件·学习
CoderIsArt8 小时前
SQLite架构
数据库·sqlite