Hive(四):where和having

1.where和Hive的区别

(1)where 执行是在聚合函数之前,having是在聚合函数之后。

(2)where是对聚合之前的数据做过滤的(在对查询结果进行分组前,将不符合where条件的行去掉),having则是对聚合之后的数据的过滤的(筛选满足条件的组,条件中经常包含聚组函数)。

(3)在where 子句中不能使用聚合函数:

-- 错误的写法
SELECT rd.brand_id from table001 rd group by rd.brand_id where rd.brand_id >='20180901'

在having语句中可以使用聚合函数:

-- 正确
SELECT rd.brand_id from table001 rd group by rd.brand_id HAVING rd.brand_id >='20180901';

2.和group by的关系

where用在group by之前;sql会在分组之前计算WHERE语句。

having用在group by之后;sql会在分组之后计算having语句,查询结果中只返回满足having条件的组。

3.group by、order by与having、where的位置先后

顺序是:
where…group by…having…order by (这里的group by 与 having 的位置可以调换,但是having放在后面效率高!),即where最前,order by最后。

参考链接

[Hive基础]–Where and Having

Apache Hive where|having以及group by使用注意事项

group by、order by与having、where,的位置先后

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HAVING语句是在GROUP BY之后使用的,它用于对查询结果进行筛选,只返回满足条件的组。与WHERE语句不同,WHERE针对表中的列发挥作用,而HAVING针对查询结果中的列发挥作用。此外,WHERE后面不能写分组函数,而HAVING后面可以使用分组函数。在Hive中使用HAVING语句时,可以结合GROUP BY来进行分组统计操作。例如,可以使用HAVING语句找出每个部门的平均薪水大于2000的部门,通过以下语句实现:SELECT epname, avg(sal) AS avg_sal FROM emp GROUP BY epname HAVING avg_sal > 2000。这样可以得到满足条件的部门和对应的平均薪水。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Hive基本查询操作](https://blog.csdn.net/weixin_45618366/article/details/106475693)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [Hive):where和having](https://blog.csdn.net/chandelierds/article/details/107932046)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值