MYSQL--having

  • having字句可以让我们筛选分组之后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having字句前。
  • 而having子句在聚合后对组记录进行筛选。我的理解就是真实表中没有此数据,这些数据是通过一些函数产生的。

HAVING和这个WHERE类似,可以说是一对兄弟,但是呢,又不一样。

我们来这么举栗子,好比现在要统计中国每个地区的人口,然后呢,把人口超过1000万的城市给它列举出来,顺便输出一下具体的内个人口数量。我们大概写一下这个SQL语句。

SELECT 城市名字,COUNT(1) from 中国 WHERE count(1) > 1000万 GROUP BY 城市名字 

大概就这样吧,将就看一下,接下来我们分析。

我们这个SQL,应该是先把这个中国的所有城市进行划分,然后去统计每个城市的人口,统计好之后,我们再去进行查询人口数量超过1000万的,但是,我们看上面的这个SQL,虽然说写了,但是我和大家说,这个语句是查不出来的。为什么呢?

原因很简单,这里需要说一下这个SQL的执行情况,(我先说,各位先听,我后面会有章节进行细讲的)SQL语句拿到之后,是先执行from的,然后拿到数据,通过WHERE进行筛选的,但是啊,各位,我们根本没有办法拿到这个count(1),因为这个值我们只能在GROUP BY 之后,统计完成后,才能拿到,所以说啊,这个SQL是一个错误的SQL,并且会报错。

那我们如何去实现上面的业务呢?

这时候,HAVING骑着动感单车就来了。

HAVING呢,它是可以再GROUP BY 之后实现筛选各种数据,也就是说,它可以做到我们上面所说的问题。怎么用这个HAVING呢?

SELECT 城市名字,COUNT(1) from 中国 GROUP BY 城市名字 HAVING count(1) > 1000万

这货是写在我们GROUP BY 的,从而我们也可以发现啊,WHERE 是写在GROUP BY 之前的,而HAVING是写在之后的。而这个也是他们的执行顺序。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值