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

相关推荐
苹果醋318 分钟前
2020重新出发,MySql基础,MySql表数据操作
java·运维·spring boot·mysql·nginx
小蜗牛慢慢爬行19 分钟前
如何在 Spring Boot 微服务中设置和管理多个数据库
java·数据库·spring boot·后端·微服务·架构·hibernate
hanbarger23 分钟前
nosql,Redis,minio,elasticsearch
数据库·redis·nosql
微服务 spring cloud1 小时前
配置PostgreSQL用于集成测试的步骤
数据库·postgresql·集成测试
先睡1 小时前
MySQL的架构设计和设计模式
数据库·mysql·设计模式
弗罗里达老大爷1 小时前
Redis
数据库·redis·缓存
仰望大佬0071 小时前
Avalonia实例实战五:Carousel自动轮播图
数据库·microsoft·c#
学不透java不改名2 小时前
sqlalchemy连接dm8 get_columns BIGINT VARCHAR字段不显示
数据库
一只路过的猫咪2 小时前
thinkphp6使用MongoDB多个数据,聚合查询的坑
数据库·mongodb