SQL语句——为什么分组函数(多行处理函数)不能用在where语句之后?

2022-11-18,,,,

SQL语句中,常见的分组查询函数为:

  sum()求和

  avg()求平均值

  min()求最小值  

  max()求最大值

  count()求数目

在分组函数中有几个重要的特征:

1.分组函数进行时自动忽略null

2.执行顺序为先分组后处理,如果没有分组则默认整张表为一组

常用SQL语句结构为:

select ...
from...
where...
group by...
order by....

其具体执行顺序为:

:from...
where...
group by...(分组)
select...
order by...

由此可见:如果将分组函数直接放置where后,分组这一步骤在where之后执行,与分组函数的特征相违背,所以不能将分组函数直接放置在where之后;

 

应用实例:

求每个部门的最高薪资,并且高于3000元

错误方法:

select depno,max(sal)
from emp
where
  max(sal)>3000
--where 后面不能直接写上分组函数
group by
  deptno;

正确方法:

引入having,having和group by是配套使用的,基本逻辑为分组后再对分组进行筛选

同时这也是引入having的必要性

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

但是having语句再效率方面不及where语句,所以从语句优化的方面出发,优先使用where,次而使用having

SQL语句优化

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

不能利用where来进行优化的例子:

求每个部门的最高平均薪资,并且平均工资高于3000元

 

SQL语句——为什么分组函数(多行处理函数)不能用在where语句之后?的相关教程结束。

《SQL语句——为什么分组函数(多行处理函数)不能用在where语句之后?.doc》

下载本文的Word格式文档,以方便收藏与打印。