数据库-新手笔记(聚合函数,分组)-进阶

本文详细介绍了SQL中的聚合函数(MIN,MAX,SUM,AVG,COUNT)及其在teacher表和student表中的使用,包括处理NULL值、计算平均工资、分组统计、以及HAVING子句的应用,旨在帮助理解如何对数据库数据进行有效分析和筛选。
摘要由CSDN通过智能技术生成

说明 

teacher表(name(姓名),title(职位),gender(性别),comm(奖金),salary(工资),subject_id(课程号))

student(name(姓名),job(职位),gender(性别),class_id(班级编号))

聚合函数

定义

聚合函数又称为多行函数,分组函数。对记录按照指定的字段进行统计并得出一行记录结果

聚合函数分类

MIN:统计指定字段的最小值

MAX:统计指定字段的最大值

SUM:统计指定字段的总和

AVG:统计指定字段的平均值

COUNT:不是对字段值的统计,而是对记录数进行的统计,统计共有多少条记录

模版(例子 查看工资平均值 最大值 最小值 工资总额)

#查询工资平均值
SELECT AVG(salary) FROM teacher;

#查询工资最大值
SELECT MAX(salary) FROM teacher;


#查询工资最小值
SELECT MAX(salary) FROM teacher;


#查询工资总数
SELECT SUM(salary) FROM teacher;


#查询老师总数
SELECT COUNT(name) FROM teacher;

注意事项

例 聚合函数忽略NULL值,AVG,COUNT最为明显

MIN,MAX,SUM,AVG是对值的统计COUNT是对记录数的统计

这边奖金是有null值的,这边可以看出有3个老师为null

#查询comm是null并计算其个数
SELECT COUNT(teacher.comm) FROM teacher WHERE comm IS NULL;

解决方式 COUNT(*)统计记录数

//统计记录条数包括null的值
SELECT COUNT(*) FROM teacher;

 这边对奖金为null的老师取平均值

正常来说 应该是0,但是null不算值

//求奖金为null的平均值
SELECT AVG(comm) FROM teacher WHERE comm IS NULL;

而 AVG(IFNULL,0) 可以将null值转化成0,可以使其被记录可以求平均值

//求奖金为null的平均值
SELECT AVG(IFNULL(comm,0)) FROM teacher WHERE comm IS NULL;

 GROUP BY 分组

GROUP BY子句的作用是在DQL中将结果集按照指定的字段值相同的记录分组,并配合聚合函数进行分组统计使用

在SELECT子句中出现了聚合函数时,那么不在聚合函数中的字段都应当出现在GROUP BY子句中 GROUP BY子句通常是配合聚合函数的,因此如果SELECT子句中没有聚合函数,通常不会用 GROUP BY子句

#查看每种职位的老师平均工资是多少
SELECT DISTINCT title , AVG(salary) 
FROM teacher
GROUP BY title;

按照多字段分组

GOURP BY子句后面可以指定多个字段,只有结果集中这些字段值都相同的记录才会看作一组 

 #查看每个班的职位的数量
 SELECT COUNT(*),class_id,job
 FROM student
 GROUP BY class_id,job

注意可以使用count(*)统计每个组的数量 ,常用与多字段分组查询

排序

ORDER BY  字段名 

#每个班老师工资的平均值
 SELECT class_id,AVG(salary)
 FROM teacher
 GROUP BY class_id
 ORDER BY AVG(salary)

按照聚合函数排序的建议定定别名,按照字段别名对结果集排序

 

#每个班老师工资的平均值
 SELECT class_id,AVG(salary) avg_sal
 FROM teacher
 GROUP BY class_id
 ORDER BY avg_sal;

HAVING

HAVING子句是紧跟在GROUP BY子句之后的,用于添加过滤条件来筛选分组的

HAVING与WHER的区别

相同点在于:都可以添加过滤条件 HAVING子句可以使用聚合函数作为过滤条件

HAVING子句是用来过滤GOURP BY对结果集进行的分组

WHERE是先进行过滤,产生结果集后并根据GOURP BY分组后 HAVING才参与进来对分许进行过滤

#查看每个科目老师的平均工资?但是仅查看平局工资高于6000的那些
SELECT AVG(salary) subject_id
FROM teacher
GROUP BY subject_id
HAVING MAX(salary)>6000

  • 15
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值