走进MySQL(4)

分组函数(多行处理函数)

多个数据对应一个结果
count
sum
avg
max
min
注:

  1. 必须先分组才能使用,如果没有分组,整张表默认为一组。
  2. 分组函数自动忽略null,不需要提前对null处理
  3. count(*) 和 count(字段) 区别在于,前者统计表的行数,后者统计不为null的数量。
  4. 不能直接使用在where子句中,比如select sal from emp where sal > min(sal); 是无效的。(在分组查询部分解释)
  5. 所有分组函数可以组合使用。

分组查询

格式:
select ... from ... group by
情景:计算某个部门的工资和、计算某岗位的工资和。

注意:执行顺序为
from->where->group by->select->order by

所以前面之所以不能在where中使用分组函数,是因为where执行时,还没有到group by的执行时间,而分组函数必须先分组才能使用。

由于select在group by之后执行,语法上已经分组完毕,所以可以在select中使用。

如果语句有group by字段,则select后面跟着的字段只能是分组函数要执行的字段+被分组的字段

根据多个字段分组:可以在group by字段后面增加多个字段。

having
如果想在group by之后再处理,可以使用having关键字,但不能代替where,必须联合group by一起使用。
执行顺序在group by之后

和where的区别在于,where先筛选再分组,having先分组再筛选。

优化策略:先使用where,再使用having

使用场景:where做不到的情况,比如:求平均工资大于2500的部门,由于平均工资只有进行分组函数avg计算后才能得出,只能通过having在avg分组之后在进行筛选。

总结

MySQL的执行顺序是值得深思的。
先取出数据,筛选一次,再分组,分组之后根据现有数据在筛选,然后选择想要的数据,最后确认是否排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值