[Hive基础]--Where and Having

版权声明:尊重原创,转载请标明"本文转自:https://blog.csdn.net/high2011" https://blog.csdn.net/high2011/article/details/82686858

Where 和Having的区别?

1、相同点

where和having:都是限定返回的数据集、 在一个sql语句中可以有where子句和having子句。

2、不同点

where

(1)在where 子句中不能使用聚组函数

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

(2) where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。

(3)WHERE语句在GROUP BY语句之前;SQL会在分组之前计算WHERE语句。  

having

(1)在having语句中可以使用聚组函数

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

(2)查询语句的select 和group by ,having 子句是聚组函数唯一出现的地方

(3)HAVING语句在GROUP BY语句之后;SQL会在分组之后计算HAVING语句。

(4) 当在gropu by 子句中使用having 子句时,查询结果中只返回满足having条件的组。

3、where和having转换

SELECT col1 FROM t1 GROUP BY col1 HAVING SUM(col2) > 10

等价于

SELECT col1 FROM (SELECT col1, SUM(col2) AS col2sum FROM t1 GROUP BY col1) t2 WHERE t2.col2sum > 10

官方文档

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Select#LanguageManualSelect-HAVINGClause

猜你喜欢

转载自blog.csdn.net/high2011/article/details/82686858