mysql学习(3):聚合查询

阅读: 评论:0

mysql学习(3):聚合查询

mysql学习(3):聚合查询

前言:

如果我们要统计一张表的记录的数据量,平均数等计算,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分组的结合使用。

本文发布于:2024-01-28 14:01:28,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17064216927926.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:mysql
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23