You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL查询中HAVING子句是否受WHERE子句过滤结果约束?

SQL HAVING子句统计范围问题解答

你的SQL语句里,HAVING COUNT(sprints.id) > 2统计的是创建时间在x到y之间的冲刺(sprints)数量大于2,而且HAVING子句本身就是基于WHERE子句过滤后的结果进行统计的。

核心逻辑说明

SQL的执行顺序决定了这一点:

  • 首先通过FROM和INNER JOIN关联sprints和users表,得到基础数据集
  • 然后执行WHERE子句,过滤出满足sprints.user_id IN (1,2,3)且sprints.created_at BETWEEN x AND y的记录
  • 接着按照users.id对过滤后的记录分组
  • 最后用HAVING筛选分组结果,这里的COUNT(sprints.id)统计的就是每个用户在WHERE过滤后的冲刺记录数,只有数量超过2的用户ID才会被返回

验证方法

如果想直观确认,可以把统计字段加到SELECT列表中:

SELECT users.id, COUNT(sprints.id) AS filtered_sprint_count 
FROM sprints 
INNER JOIN users ON (sprints.user_id = users.id)
WHERE sprints.user_id IN (1,2,3)
AND sprints.created_at BETWEEN x AND y
GROUP BY users.id 
HAVING COUNT(sprints.id) > 2

返回的filtered_sprint_count就是每个用户在指定时间范围内的冲刺数量,能直接验证统计的是过滤后的结果。

内容的提问来源于stack exchange,提问作者michaelsking1993

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 17:06:50