having和where的区别
Posted guoDaXia的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了having和where的区别相关的知识,希望对你有一定的参考价值。
HAVING子句的使用。 例子: SELECT mob_belong_to,user_id,MAX(BIRTH_DATE) FROM user_base_info WHERE sign_in_date IS NOT NULL -- AND MAX(BIRTH_DATE) IS NOT NULL GROUP BY user_id, mob_belong_to ORDER BY mob_belong_to DESC,USER_ID DESC; 执行例子,我们可以发现当可以成功执行,但是当我们将where条件使用聚合函数的注释去掉的时候,我们可以发现报错。这个是因为WHERE语句的执行顺序在聚合函数之前,所以报错。遇到这种情况我们应该使用的是HAVING: SELECT mob_belong_to,user_id,MAX(BIRTH_DATE) FROM user_base_info HAVING -- sign_in_date IS NOT NULL -- 报错 AND MAX(BIRTH_DATE) IS NOT NULL GROUP BY user_id, mob_belong_to ORDER BY mob_belong_to DESC,USER_ID DESC; 我们发现注释行会报错,它发现了前面隐藏的问题,sign_in_date不是分组的group by选项。然后将该行注释再使用HAVING子句就没有问题了。 所以我们得出结论:WHERE是在分组前面进行的执行,HAVING是在分组后进行的执行。
以上是关于having和where的区别的主要内容,如果未能解决你的问题,请参考以下文章