1. 程式人生 > >[Hive基礎]--Where and Having

[Hive基礎]--Where and Having

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