SQL 查询语句(三)分组函数

分组处理函数也叫多行处理函数,输入多行,最终输出一行。必须先分组再使用,如果没有对数据进行分组,整张表默认是一组。

注意

1.分组函数自动忽略null,不需要再用ifnull函数处理。

2.分组函数不能直接使用在where子句中

错误语句:select ename,sal from emp where sal>min(sal);  报错信息为无效使用分组函数

这是因为,在SQL中,语句顺序应该是select...from...where...group by...order by...

以上关键字的顺序不能颠倒,执行顺序是1.from,2.where,3.group by,4.select,5.order by。

由于分组函数在使用前必须先分组,而执行where语句时,还没有执行group by,没有进行分组,因此where子句后面不能使用分组函数。

3.所有分组函数可以组合起来一起用

如:select sum(sal),max(sal),min(sal),count(*) from emp;

4.分组函数不可以嵌套使用

比如错误用法:max(avg(sal))

一、分组函数

1.count 计数

计算共有多少员工?select count(ename) from emp;

count (*)与count (字段名)有区别,count (字段名) 统计的是字段下不为null的元素总数,count(*)统计的是总行数,只要有一行数据,count(*)就+1

2.sum 求和

select sum(sal) from emp;

3.avg 平均数

select avg(sal) from emp;

4.max 最大值

select max(sal) from emp;

5.min 最小值

select min(sal) from emp;

二、分组查询

实际应用中,需要先分组再查询,使用select...from...group by...;

重点强调:在一条select语句中,如果使用group by分组的话,select后面只能跟参加分组的字段以及分组函数,其他一律不能跟。

1.对一个字段分组

按照工作岗位分组,对工资求和?

select job,sum(sal) from emp group by job;

该语句的执行顺序:from,group by,sum(sal)

2.多重分组

找出每个部门,不同工作岗位的最高薪资?

select deptno,job,max(sal) from emp group by deptno,job;

3.having过滤 

对分组结果可使用having进一步过滤。having与where不同,必须结合group by一起使用,不能单独使用。

找出每个部门薪资最大值,显示3000以上的薪资?

select deptno,max(sal) from emp group by deptno having max(sal)>3000;

也可将大于3000的先找出来,再分组求最大值:

select deptno,max(sal) from emp where sal>3000 group by depto;

where和having优先选择where,where没办法的再用having

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值