聚合函数

本文介绍了SQL中的聚合函数,如在分组查询中使用GROUP BY进行统计计算。同时,对比了WHERE和HAVING子句的区别,WHERE应用于分组前的条件筛选,HAVING则用于分组后的条件过滤,且HAVING可直接与聚合函数配合。最后总结了聚合函数在SELECT语句中的使用规则,以及GROUP BY允许对多列进行分组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

聚合函数

聚合函数类型解释
MAX()求最大值
MIN()求最小值
AVG()求平均值
COUNT()统计个数
SUM()求和
--查询所有员工的最高工资,最低工资,平均工资,以及工资合计
SELECT MAX(E.SAL) ,MIN(E.SAL) ,ROUND(AVG(E.SAL)) ,SUM(E.SAL)
FROM EMP E;
--  ROUND()表示将括号内的值四舍五入计算

分组

GROUP BY 分组
聚合函数结合分组表达式一起使用,表示分组统计
聚合函数汇总后进行计算,计算结果 返回一个值

如果对查询的结果集(表)做了分组,那么每个组会返回一个计算结果

-- 查询每个部门的人数,他们的平均工资 ,人数
SELECT DEPTNO,AVG(SAL) 部门平均工资 ,COUNT(*) 部门人数
FROM EMP
GROUP BY DEPTNO;  --按部门分组

在这里插入图片描述
HAVING 后面跟分组后的过滤条件

-- 查询每个部门的人数,他们的平均工资 ,要求部门人数大于3人
SELECT DEPTNO,COUNT(*) 部门人数,AVG(SAL) 部门平均工资
FROM EMP
GROUP BY DEPTNO
HAVING COUNT(*)>3; --having 后面可以直接用 聚合函数作为条件

在这里插入图片描述

where和having的区别

  1. where必须放在group by 之前,而having必须放在group by 之后
  2. having后面可以直接跟聚合函数作为条件,而where后面不行
  3. where后面可以跟除了聚合函数之外的所有条件
    而having只能跟聚合函数和分组字段作为过滤条件
-- 查询出各部门的人数,要求工资高于1500 (SAL > 1500)
SELECT DEPTNO,COUNT(*)
FROM EMP
WHERE SAL >1500
GROUP BY DEPTNO;
--查出个各部门的人数,要求最低工资高于 1000
SELECT DEPTNO,COUNT(*) 部门人数,MIN(SAL) 部门最低工资
FROM EMP
GROUP BY DEPTNO
HAVING MIN(SAL)>1000;

-HAVING后面可以跟 分组字段作为过滤条件

--查出各部门的人数,要求部门编号等于 10 和30 
--方法1
SELECT DEPTNO,COUNT(*)
FROM EMP
WHERE DEPTNO IN (10,30)
GROUP BY DEPTNO;
--方法2
SELECT DEPTNO,COUNT(*)
FROM EMP
GROUP BY DEPTNO
HAVING DEPTNO IN (10,30);

总结

  1. 聚合函数放在SELECT后面查询时,只能跟分组字段一起查询,未分组的字段不能跟聚合函数同时放在SELECT后面
  2. GROUP BY以后,SELECT后面只能跟 分组的字段和聚合函数
  3. 只要不是FROM后面的表中数据/字段,不受上述1和2条件的限制
SELECT DEPTNO ,COUNT(*)部门人数 , 1 , 'ABC'
FROM EMP
GROUP BY DEPTNO ;   

在这里插入图片描述

  • GROUP BY 可以同时对多列进行分组,计算结果也是多列分组后的计算结果
-- 查询各部门,各种岗位的人数
SELECT DEPTNO ,JOB ,COUNT(*) 各部门各职位人数
FROM EMP 
GROUP BY DEPTNO  ,JOB ;  -- 按多个字段分组,只需要在每个字段之间用逗号隔开即可

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值