欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

postgresql笔记001—sql语句中where和having之间的区别

程序员文章站 2024-02-10 13:13:16
...

postgresql笔记001 sql语句中where和having之间的区别

0011 where后面不能跟聚合函数

where 后面不能跟集合函数或者说聚合函数不能用于where子句中。因为where子句决定哪些行可以进入聚合阶段,而且,where后面的子句必须在聚合函数前面进行计算。
例如: … where temp_lo = max(temp_lo); 在where后面的子句中直接使用max聚合函数将会报错。
但是如果改写成 … where temp_lo = (select max(temp_lo) from tab1); 这样是可以的。
为什么?因为子查询是一次独立的计算,它独立于外层查询,来计算自己的 聚合函数。

0012 having 后面可以直接跟聚合函数;

例如 根据城市名分组,来获得每一个城市中最低气温列中的最大气温,且气温小于35度。

select city,max(temp_lo) 
from weather 
group by city
having max(temp_lo) <35;

理解集合函数和SQL中的where和having子句之间的关系

where 是在分组和聚合函数之前选取输入行(他控制那些行进入聚合计算)。
而having在分组和聚合之后选取输出行。
所以where子句不能包含聚合函数;用聚合函数来判断那些行将要输入给聚合运算是没有意义的。
而having子句总是可以包含聚合函数。
在一定条件下,将判定语句写在where后面的子句中比写在having中更加高效。

相关标签: postgre