SQL中的Having与Where的区别(面试常问)

一、Having与where的区别

1、分组前后过滤

Having 是分组后对数据进行过滤

Where 是在分组前对数据进行过滤

2、是否能使用聚合函数

Having后面可以使用聚合函数

Where后面不可用使用聚合函数

SELECT [ALL|DISTINCT] <目标表达式>....

FROM <表名或者视图名>..

[WHERE <条件表达式>]

[GROUP BY <列名 1> [HAVING] <条件表达式>]

[ORDER BY <列名 2> [ASC|DESC]]

在查询过程中执行顺序:from>where>group(含聚合)>having>order>select

为什么不能使用聚合函数呢?

例如SUM, COUNT, MAX, AVG等。这些函数和其它函数的根本区别就是它们一般作用在多条记录上。

因为where在分组函数之前执行,where后面跟的条件表达式一定要是表中字段,聚合函数是表中没有的字段,所以不行。

比如数据:

这样写完全没有问题。

SELECT Ssex,COUNT(Ssex) FROM `student` GROUP BY Ssex WHERE Sage > 10;

但是下面这样下就不行了

SELECT Ssex,COUNT(Ssex) FROM `student` WHERE SUM(Sage) > 10   GROUP BY Ssex ;

为什么不行呢? 因为表中是没有SUM(Sage)该字段的。

Having的话,就可以跟聚合函数,因为是过滤已经分好组的表。这样写完全没问题

SELECT Ssex,COUNT(Ssex) FROM `student`  GROUP BY Ssex HAVING  SUM(Sage) > 10 ;

HAVING结合聚合函数表示:年龄和大于10的分组。 是筛选的分组出来,而不是每个分组中大于10的

JAVA高频面试题:

https://blog.csdn.net/qq_40262372/article/details/112556249

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万小猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值