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

相关推荐
菜鸟赵大宝1 小时前
2023软考中级《软件设计师》(备考冲刺版) | 数据库系统
数据库·数据库开发·数据库架构
TNTLWT2 小时前
MySQL:设计数据库与操作
数据库·mysql
橙子味冰可乐2 小时前
isprintable()方法——判断字符是否为可打印字符
java·前端·javascript·数据库·python
yunpeng.zhou2 小时前
logging 模块简单使用记录
java·前端·数据库
シ風箏3 小时前
Milvus【部署 01】向量数据库Milvus在Linux环境下的在线+离线安装
linux·数据库·milvus·向量数据库·特征搜索
qqyqqyqqyqqy17 小时前
Mysql的SQL语句实例
数据库·sql·mysql
铁蛋Q7 小时前
linux和mysql基础指令
linux·运维·mysql
賺钱娶甜甜7 小时前
NSSCTF-Web题目19(数据库注入、文件上传、php非法传参)
数据库·sql·web安全
G皮T8 小时前
【Spring Boot】Java 的数据库连接模板:JDBCTemplate
java·数据库·spring boot·jdbc·jdbctemplate
m0_738687289 小时前
MySQL备份与恢复
数据库·mysql