MySQL中的分组聚合查询

来源:互联网 发布:团队办公软件 编辑:程序博客网 时间:2024/04/30 12:43

MySQL中的分组聚合查询

前言

前面我们学习了MySQL中比较常用的简单查询和条件查询,今天来学习一下更高级的分组聚合查询。

MySQL中常用聚合函数表

函数名说明COUNT([DISTINCT | ALL] * )统计数据表中的记录数COUNT([DISTINCT | ALL] <列名> )统计数据表中的一列中值的个数MAX([DISTINCT | ALL] <列名>)求数据表的一列值中的最大值MIN([DISTINCT | ALL] <列名>)求数据表的一列值中的最小值SUM([DISTINCT | ALL] <列名>)计算数据表的一列中值的总和AVG([DISTINCT | ALL] <列名>)计算数据表的一列中值的平均值

其中,如果指定关键字DISTINCT,则表示在计算时要取消指定列中的重复值;如果不指定DISTINCT短语或指定ALL短语(ALL为默认值),则表示不取消重复值。PS.除了函数COUNT(*)外,其余聚合函数(包括COUNT(<列名>))都会忽略空值。

下面根据之前的表来做一下示例。这里只给出SQL命令。

#查询学生总人数

SELECT COUNT(*) FROM tb_student;

#查询选修了课程的学生总人数

SELECT COUNT(DISTINCT studentNo) FROM tb_score;

#计算选修课程编号为“2017001”的学生平均成绩

SELECT AVG(score) FROM tb_score WHERE courseNo=’ 2017001;

#计算选修课程编号为“2017001”的学生最高分

SELECT MAX(score) FROM tb_score WHERE courseNo=’ 2017001;

#如果有学生选修课程后没有成绩,即字段score的值为空,在使用SUM(score)、AVG、MAX、MIN等聚合函数进行计算时,系统都会自动忽略空值。

分组聚合查询

分组聚合查询是通过把聚合函数(如COUNT()、SUM()等)添加到一个带有GROUP BY分组子句的SELECT语句中来实现的。

GROUP BY子句的语法格式是:

[GROUP BY 字段列表] [HAVING <条件表达式>]

其中,GROUP BY对查询结果按字段列表进行分组,字段值相等的记录分为一组;指定用于分组的字段列表可以是一列,也可以是多个列,彼此间用逗号分隔;HAVING短语对分组的结果进行过滤,仅输出满足条件的组。

PS.使用GROUP BY子句后,SELECT子句的目标列表达式只能包含GROUP BY子句中字段列表和聚合函数。

下面看一下具体实例SQL:

#查询各个课程号及相应的选课人数

SELECT courseNo, COUNT(studentNo) FROM tb_score GROUP BY courseNo;

#查询每个学生的选课门数、平均分和最高分

SELECT studentNo, COUNT(*) 选课门数, AVG(score) 平均分, MAX(score) 最高分 FROM tb_score GROUP BY studentNo;

#查询学生选课的平均成绩,只取大于80分的才输出

SELECT AVG(score) 平均分 FROM tb_score HAVING AVG(score)>=88;

小结

上面就是今天的主题内容了,今天简单分享下MySQL中的分组聚合查询,这对数据分析很有帮助,可以分各个维度的数据指标。希望通过上面的操作能帮助大家。如果你有什么好的意见,建议,或者有不同的看法,我都希望你留言和我们进行交流、讨论。

如果想快速联系我,欢迎关注微信公众号:AiryData。

0 0
原创粉丝点击