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

SQL Server对同一列设置多查询条件时HAVING子句报错如何解决

报错原因

你编写的SQL报错是因为HAVING子句中直接使用了未分组、未被聚合函数包裹的groups字段,不符合SQL分组查询的语法规则。

正确实现SQL

如果只需要查询符合条件的name列表:

SELECT name
FROM tbl
WHERE groups >= 35
GROUP BY name
HAVING 
  -- 存在groups=35的记录时,必须同时有>=36的记录
  (MIN(groups) = 35 AND MAX(groups) >= 36)
  -- 所有groups都>=36的情况直接保留
  OR MIN(groups) >= 36

如果需要保留符合条件的name对应的所有groups>=35的行:

SELECT t.*
FROM tbl t
INNER JOIN (
  SELECT name
  FROM tbl
  WHERE groups >= 35
  GROUP BY name
  HAVING (MIN(groups) = 35 AND MAX(groups) >= 36) OR MIN(groups) >= 36
) valid_name ON t.name = valid_name.name
WHERE t.groups >= 35

执行结果

上述语句执行后返回的结果如下:

namegroups
a35
a36
c36
d37

完全符合筛选规则,成功排除了仅存在groups=35记录的nameb。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:54:00