码迷,mamicode.com
首页 > 其他好文 > 详细

having和where的区别

时间:2016-12-27 01:07:49      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:having   _id   ase   选项   from   语句   class   color   select   

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的区别

标签:having   _id   ase   选项   from   语句   class   color   select   

原文地址:http://www.cnblogs.com/aigeileshei/p/6224326.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!