MySQL表中的聚合查询

文章介绍了MySQL中的聚合查询功能,包括COUNT、SUM、AVG、MAX、MIN等聚合函数的用法,以及GROUPBY子句用于数据分组和HAVING子句用于分组后的条件过滤。示例展示了如何计算学生单科总分、平均分,以及员工按职位分组的平均工资等操作。
摘要由CSDN通过智能技术生成

聚合查询

在MySQL初阶中进行的查询都是对于同一条记录的列与列之间进行的运算,那如何对多条记录的不同行进行运算呢(比如计算所有同学某一单科的总分,某一单科的平均分)?此时就需要聚合查询来操作了!

1.聚合函数

函数

说明

COUNT([DISTINCT] expr)

返回查询到的数据的数量

SUM([DISTINCT] expr)

返回查询到的数据的总和,不是数字没有意义

AVG([DISTINCT] expr

返回查询到的数据的平均值,不是数字没有意义

MAX([DISTINCT] expr)

返回查询到的数据的最大值,不是数字没有意义

MIN([DISTINCT] expr)

返回查询到的数据的最小值,不是数字没有意义

现在新建一个学生表如下:

count():返回查询到的数据的数量(即记录的总数)

conut内部的参数可以是*(此时相当于通配符,与select查询中的*意思一样),也可以是常数0,1,2......,也可以是字段名;

当参数为*或者常数时,返回的是此时表内所有记录的总数

当参数为字段名时,返回的是除了NULL记录之外的所有记录的总数

sum():返回查询到的数据的总和,不是数字没有意义

sum()将参数列的所有数据进行加和,在加和的同时该函数会自动规避掉NULL数据,避免了加和结果为NULL的情况发生

也可以对多个字段进行操作(同样可以对表达式起别名):

avg():返回查询到的数据的平均值,不是数字没有意义

avg()将参数列的所有数据进行加和,在加和的同时该函数会自动规避掉NULL数据,避免了加和结果为NULL的情况发生

也可以对多个字段进行操作(同样可以对表达式起别名):

max(),min():返回查询到的数据的最大值和最小值,不是数字没有意义

当同时使用两个聚合函数时,需要用逗号隔开;

注意:以上所有聚合函数在使用时,函数名后面的括号必须紧挨着函数名(这是SQL语法本身的原因)!

2.group by子句

select中使用group by子句可以对指定列进行分组查询,需要搭配聚合函数一起使用!

新建一个员工表如下:

根据每个员工的职位进行分组然后查询分组后每个职位的平均工资:

运算过程:把role这一列值相同的行分成一组,然后使用聚合函数针对每个分组分别计算!

搭配order by子句对分组后的数据进行排序:

如果没有使用聚合函数:

如果不使用聚合函数的时候,查询的结果会是每个分组的第一条记录,所以一开始在前面就说明了group by子句需要搭配聚合函数一起使用!

3.having子句

group by子句进行分组以后,需要对分组结果再进行条件过滤时,不能使用where语句,而需要用having子句

查询分组后平均工资在10000以上的数据:

where和having的区别:

分组之前指定条件(先筛选,再分组):使用where
分组之后指定条件(先分组,再筛选):使用having

使用where的情况(统计每个岗位的平均工资,但是刨去汤老湿的数据):

使用having的情况(查询每个岗位的平均工资,但是刨去平均工资在10000以下的数据):

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值