【MySQL】having和where的区别

讲到having,首先要提一下group by。


group by的作用是什么?

其实就是把数据分为多个逻辑组,以便对每个组都能进行上面的“聚集计算”,得到汇总的信息。也就是说group by指示了数据库对每个组而不是整个结果集进行聚集。

什么是“汇总的的信息”?就是利用各种聚集函数,比如count,avg,sum,max,min之类的,目标是得到总体的信息,而不是某些行的具体数据。

注意:group by使用在where之后,order by 之前。


那么having的作用是什么?

当我们进行分组之后,如果还需要对分组进行过滤,也就是:”包括哪些分组,排除哪些分组“,比如我们想得到至少有两个订单的所有的顾客。

之前的where也就完成过滤的作用,但是他针对的是”行“,而我们这里需要针对”分组“进行过滤,然而where根本没有分组的概念,因此就需要用到having!

也就是说where过滤行,having过滤分组。

 

例子:对于想得到至少有两个订单的所有的顾客。

扫描二维码关注公众号,回复: 11599785 查看本文章

可以:

select cust_id,count(*) from orders group by cust_id having count(*)>=2;

当然,having也可能和where一起使用,比如要列出具有两个以上订单,且price列为10以上的用户

select cust_id,count(*) from orders where price>10  group by cust_id having count(*)>=2;

也就是说,首先会将price>10的行都过滤出来,然后按照cust_id分组,并得到行数大于2的分组。

猜你喜欢

转载自blog.csdn.net/qq_35590091/article/details/108092723