Hive中类SQL语言中的where 与having

1.用的地方不一样

   where可以用于select、update、delete和insert...into语句中。
   having只能用于select语句中


2.执行的顺序不一样

  where 子句在聚合之前起作用,不能放在 GROUP BY 子句之后;

  where  子句指定的检索条件中,不能引用包含在聚合函数中的输入源中的列或者表达式

  having 子句在聚合之后起作用,不能放在 GROUP BY 子句之前;

  having  子句的检索条件中,如果引用了输入源的列或表达式,要求要么出现在聚合函数中,要么出现在 GROUP BY 子句中
    
3.子句有区别

   where子句中的条件表达式having都可以跟,而having子句中的有些表达式where不可以跟;
   having子句可以用集(/聚)合函数(sum、count、avg、max和min),而where子句不可以。

当然有些地方两者都可以用,比如: 
select studentid, avg(score) 
from studentScore 
group by studentid 
having left(studentid, 1)=’0’ 

select studentid, avg(score) 
from studentScore 
where left(studentid, 1)=’0’ 
group by studentid 

两者之间没有哪个好用,哪个不好用,根据场景优化选择就好,解决问题才是关键
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值