欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 美景 > MYSQL——聚合查询

MYSQL——聚合查询

2024/10/24 11:12:50 来源:https://blog.csdn.net/2301_80251684/article/details/141593722  浏览:    关键词:MYSQL——聚合查询

聚合查询就是一些MYSQL中的内置函数

聚合查询本质上是针对数据表中的行和行进行计算

函数说明
count([DISTINCT]expr)返回查询到的数据的数量,统计数据的行数
sum([DISTINCT]expr)返回查询到的数据的总和,不是数字没有意义
avg([DISTINCT]expr)返回查询到的数据的平均值,不是数字没有意义
max([DISTINCT]expr)返回查询到的数据的最大值,不是数字没有意义
min([DISTINCT]expr)返回查询到的数据的最小值,不是数字没有意义

以上操作都是针对某一列进行计算的

1.count();统计所有的行

 推荐使用count(*),这种写法是SQL标准中规定的


指定某一列进行统计

 若指定列中有null值,则null值不参与统计

2.sum(列名)求和

把查询结果中所有行中的指定列进行相加

注意:列的数据类型必须是数值型,不能是字符或日期

示例:计算学生语文成绩的总分

计算出来的学生语文成绩总分,结果在一个临时表中,计算出来的结果不受表中字段长度的约束

在计算语文分数的和时,可以使用别名


当进行运算时,运算数中有null时:

 当使用sum()时,null值不参与计算

结果在一个临时表中,结果不受表中字段的长度约束


 sun()中的字段不是数值类型时,会报一些警告


对同一个表中的多个列分别求和

语法格式:

select sum(列1),sum(列2),sum(列3) from 表名;

3.avg(列名)求平均值

对所有行的指定列进行求平均值的运算

对语文成绩求平均值

 在计算语文成绩平均值时,可以使用别名

在计算平均值时,avg的参数可以是表达式

求三科成绩总分的平均值

4.max(), min()求最大值和最小值

对所有行的列求最大值和最小值

求最小值:

 找出语文成绩的最大值:

 同一列可以使用多个聚合函数:

多个聚合函数可以同时使用: 


 sum(),avg(),min(),max()均不能在非数值类型的字段使用

5.group by子句(分组查询)

select中使用group by 子句可以对指定列进行分组查询。需要满足:使用group by进行分组查询时,select 指定的字段必须是“分组依据字段”,其他字段想要出现在select中则必须包含在聚合函数中。

分组依据字段:对哪个列分组

其他字段:没有指定分组的字段,呈现是要通过聚合函数,比如求和,求平均值


语法:

select column1,sum(column2),avg(column3),......from 表名 group by column1,column4;

1.column1:分组的列名

2.sum(column2),avg(column3):没有被分组的列(需要运算的列,但是要显示结果,那么就需要用到聚合函数)

3.group by:分组的关键字

4.column1,column4:要分组的列名

示例1:计算不同部门的平均工资

MYSQL内部先分组再计算


round(数值,小数点的位数)

让各部门工资的平均保留两位小数:


group by之后可以跟order by子句 

计算各部门的平均工资,按部门分组,然后按平均工资进行升序排序


HAVING(对分组后的结果进行条件过滤)

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

where是对表中每一行的真实数据进行过滤

having是对group by之后,计算出来的结果进行过滤

计算平均工资大于12000的部门:

having可以吧这个结果集中的数据进行过滤操作,平均工资这些数据并不是表中真正记录,而是通过聚合函数计算得出来的 

having跟在group by子句后面,对分组后的结果进行过滤


where用在from表名之后,也就是分组之前

having跟在group by子句之后

where是对真实数据进行过滤,having是对分组的结果进行过滤

只需要在合适的位置写where和having即可


查询每个部门的最高工资,最低工资,总工资和平均工资

1.按部门分组

2.使用相应的聚合函数


6.补充

count()的特殊用法:

当count用在having后后面时,可以用来计算每个组有多少条数据


建立一张新表,将旧表中的指定列的数据导入到新表中

语法:

insert into 表名[(column1,coulmn2,.....)]select........

插入查询结果 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com