HAVING 的使用范围大于 WHERE,WHERE只能过滤行,而HAVING除了能过滤行还能过滤分组。
重要区别:在GROUP BY之前,HAVING 和 WHERE的用法一样,效果也一样;
在GROUP BY 之后,只能使用 HAVING,用于过滤分组之后的表,实际:上都是在GROUP BY之后使用 HAVING。
eg:表中保存的数据是会员id,会员姓名,会员等级,会员注册时间。目标是取出2018-01-01日期之后注册的会员等级大于V2的会员数。
这样就需要同时使用 WHERE 和 HAVING 过滤,前面WHERE 过滤日期,GROUP BY 后过滤会员等级。
SELECT COUNT(user_id), user_level FROM table_name WHERE date_time > '2018-01-01' GROUP BY user_level HAVING user_level IN ('V3','V4','V5')
SELECT 子句的顺序