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最后。