【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过滤分组。

 

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

可以:

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的分组。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值