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

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中更加高效。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值