mysql之聚合函数、groupby、having sql中提供聚合函数可以⽤来统计,求和,求最值等
那么聚合函数有哪些呢?
COUNT 统计⾏数量
SUM 求某⼀列的和
AVG 求某⼀列的平均值
MAX 求某⼀列的最⼤值
MIN 求某⼀列的最⼩值
下⾯给出⼀些具体的⽤法
⾸先创建数据表如下:
执⾏列、⾏计数(count):
COUNT 标准格式:
SELECT COUNT(<;计数规范>) FROM 表名;
其中,计数规范包括
-* : 计算所有选择的的⾏,包括NULL的值
- ALL列名 : 计数所有指定列的⾮空值,如果不写,就默认为ALL
- DISTINCT 列名 : 计数指定的列的唯⼀⾮空值
例如,计算班⾥有多少学⽣:
这样就出错了,会把null值也算进来,可以这样来计算:
groupby是什么函数也可以加⼊条件筛选,例如计算⼥⽣的⼈数
也可以计算班级数⽬,需要⽤到DISTINCT:
DISTINCT 即去重,如果不加DISTINCT返回的结果会是4
返回列合计值(SUM):
注:SUM 只有 ALL 和 DISTINST 俩种计数规范,并没有*
计算学⽣的年龄之和:
返回列的平均值(AVG):
计算学⽣年龄的平均值
返回最⼤值/最⼩值(MAX/MIN):
求年龄最⼤的学⽣(最⼩年龄同理)
注:这⾥只能求最⼤值,不能查询学⽣的具体信息,需要⽤到⼦查询
数据分组 (GROUP BY )
SQL数据可以按照列名分组,配合聚合函数⼗分实⽤
⽐如我们想知道每个班⾥有⼏个学⽣,我们可以使⽤ GTOUP BY 配合 COUNT 使⽤:
注意:因为聚合函数通过作⽤于⼀组数据⽽只返回⼀个单个值,因此,在SELECT语句中出现的元素要么为⼀个聚合函数的输⼊值,要么为GROUP BY语句的参数,否则会出错。
HAVING 过滤条件
HAVING语句通常与GROUP BY语句联合使⽤,⽤来过滤由GROUP BY语句返回的记录集。HAVING语句的存在弥补了WHERE关键字不能与聚合函数联合使⽤的不⾜。
再说HAVING之前先要讲⼀下sql的执⾏顺序:
第⼀步:执⾏FROM
第⼆步:执⾏WHERE过滤条件
第三步:执⾏GROUP BY 分组
第四步:执⾏SELECT投影
第五步:执⾏HAVING过滤条件
第六步:执⾏ORDER BY排序
例,我们想查询平均年龄在20岁以上的班级
能⽤下⾯的语句吗?
SELECT student_class, AVG(student_age) FROM t_student WHERE AVG(student_age)>20 GROUP BY student_class;
结果会出错。正因为聚合函数在WHERE之后执⾏,所以这⾥在WHERE判断条件⾥加⼊聚合函数是做不到的。
这⾥使⽤HAIVING即可完成:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论