MySQL表中的聚合查询

聚合查询

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

1.聚合函数

函数

说明

COUNT([DISTINCT] expr)

返回查询到的数据的数量

SUM([DISTINCT] expr)

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

AVG([DISTINCT] expr

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

MAX([DISTINCT] expr)

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

MIN([DISTINCT] expr)

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

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

MySQL表中的聚合查询_第1张图片

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

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

MySQL表中的聚合查询_第2张图片

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

MySQL表中的聚合查询_第3张图片

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

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

MySQL表中的聚合查询_第4张图片

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

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

MySQL表中的聚合查询_第5张图片

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

MySQL表中的聚合查询_第6张图片

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

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

MySQL表中的聚合查询_第7张图片

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

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

MySQL表中的聚合查询_第8张图片

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

2.group by子句

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

新建一个员工表如下:

MySQL表中的聚合查询_第9张图片

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

MySQL表中的聚合查询_第10张图片

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

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

MySQL表中的聚合查询_第11张图片

如果没有使用聚合函数:

MySQL表中的聚合查询_第12张图片

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

3.having子句

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

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

MySQL表中的聚合查询_第13张图片

where和having的区别:

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

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

MySQL表中的聚合查询_第14张图片

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

MySQL表中的聚合查询_第15张图片

你可能感兴趣的:(MySQL学习,mysql,java)