mysql 分组聚合(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 WHEREcourseNo=’ 2017001;

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

SELECT MAX(score) FROM tb_score WHEREcourseNo=’ 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_scoreGROUP BY courseNo;

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

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

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

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

小结

上面就是今天的主题内容了,今天简单分享下MySQL中的分组聚合查询,这对数据分析很有帮助,可以分各个维度的数据指标。希望通过上面的操作能帮助大家。

版权声明:本文内容由互联网用户投稿发布,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2211788188@qq.com 举报,一经查实,本站将立刻删除。如需转载请注明出处:https://www.wptmall.com/a/article/17618

为您推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注