[Hive基礎]--Where and Having
阿新 • • 發佈:2018-11-09
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