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........

插入查询结果 

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Sakila是MySQL官方提供的一个样例数据库,用于演示和练习MySQL数据库的使用。数据库包含了一个虚构的DVD租赁店的数据,其中包括客户、电影、租赁记录等等。 Sakila数据库包含16张表,包括: 1. `actor`:演员表,包含演员的ID、名字和最后更新时间。 2. `address`:地址表,包含地址的ID、地址、邮编、电话和最后更新时间。 3. `category`:电影类别表,包含类别的ID和名称以及最后更新时间。 4. `city`:城市表,包含城市的ID、城市名称、国家ID和最后更新时间。 5. `country`:国家表,包含国家的ID、国家名称和最后更新时间。 6. `customer`:客户表,包含客户的ID、姓名、地址、邮编、电话、积分、注释和最后更新时间。 7. `film`:电影表,包含电影的ID、标题、描述、发行年份、语言ID、原始语言ID、租金、长度、评级和最后更新时间。 8. `film_actor`:电影演员表,包含电影ID和演员ID。 9. `film_category`:电影类别表,包含电影ID和类别ID。 10. `inventory`:库存表,包含DVD的ID、电影ID和最后更新时间。 11. `language`:语言表,包含语言的ID、名称和最后更新时间。 12. `payment`:支付表,包含支付的ID、客户ID、租赁ID、支付时间、租赁时长和支付金额。 13. `rental`:租赁表,包含租赁的ID、客户ID、电影ID、租赁时间和最后更新时间。 14. `staff`:员工表,包含员工的ID、姓名、地址、邮编、电话、邮箱、店铺ID、用户名、密码和最后更新时间。 15. `store`:店铺表,包含店铺的ID、地址、邮编、电话和最后更新时间。 16. `sales_by_film_category`:按电影类别统计销售额的视图,包含类别名称和销售额。 使用Sakila数据库可以练习SQL查询、联结、聚合、子查询等等操作,是学习MySQL的很好的工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值