mysql学习(3):聚合查询

本文介绍了SQL中的聚合查询,包括COUNT(), SUM(), AVG(), MAX(), MIN()等常见聚合函数的用法,并通过实例展示了如何进行分组查询。同时,解释了GROUP BY和HAVING子句的用途,以及它们与WHERE子句的区别。文章最后总结了聚合查询在实际操作中的应用。
摘要由CSDN通过智能技术生成

前言:

如果我们要统计一张表的记录的数据量,平均数等计算,SQL提供了专门的聚合函数,使用聚合函数进行查询,就是聚合查询。

正文:

1. 聚合函数

常见的聚合函数有:

函数说明
COUNT()计算行数总量
SUM()计算某一列的和值,该列必须是数值类型
AVG()计算某一列的平均值,该列必须是数值类型
MAX()计算某一列的最大值
MIN()计算某一列的最小值

举几个例子:

SELECT COUNT(*) as num FROM students; #查询students表一共有多少条记录
SELECT COUNT(*) as boys FROM students WHERE gender = 'M'; #可以加WHERE过滤条件
SELECT AVG(score) as average FROM students WHERE gender = 'M'; #统计男生的平均成绩

注意:如果聚合查询的查询条件没有匹配到任何行,COUNT()会返回0,而SUM()、AVG()、MAX()和MIN()会返回NULL。

2. 分组

如果我们要分别统计每班的学生数量,难道要不断修改WHERE查询条件吗?对于聚合查询,SQL还提供了“分组聚合”的功能,SQL提供了group by关键字,如下示例:

SELECT COUNT(*) as num FROM students GROUP BY class_id;

执行这个查询,COUNT()的结果不再是1个,而是按class_id分组后的组数。但是查出的结果并不能看出是那几个班的,所以需要班级信息也加入结果集中:

SELECT class_id, COUNT(*) num FROM students GROUP BY class_id; #增加class_id

注意,这时如果我们把name字段加入到结果集中,查询时会报错,

SELECT name, class_id, COUNT(*) num FROM students GROUP BY class_id; #报错

报错信息是提示,name字段要么在group by之后,要么被聚合函数包裹。报错信息如下:

column "xxx" must appear in the GROUP BY clause or be used in an aggregate function

3. 分组后过滤

分组查询后,也可以制定一些条件来返回查询结果,分组后过滤使用having关键字,如统计工资总和大于9000的部门名称及工资总和:

SELECT department,SUM(salary) FROM employee
GROUP BY department HAVING SUM(salary) > 9000;

having的作用和where一样,但是having只能用于group by之后。having和where的区别有:
1、having是在分组后对数据进行过滤;having后面可以使用分组函数;
2、where是在分组前对数据进行过滤;where后面不可以使用分组函数;
where是在分组前进行过滤,如果某行记录没有满足where子句的条件,那么这条记录将不参与分组,而having是对分组后的数据的约束。

书写SQL语句的顺序是:

SELECT FROM WHERE GROUP BY HAVING ORDER BY LIMIT 

总结:

聚合查询涉及到聚合函数与Group By分组的结合使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值