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

如何在SQL中不使用GROUP BY/HAVING函数实现数据过滤

解决方案

核心问题原因

你把行级过滤规则错放在了HAVING子句中:HAVING是对GROUP BY分组聚合后的结果进行过滤,所以其中用到的非聚合字段必须属于分组字段;而排除特定客户、筛选单据类型、筛选商品编码都属于分组前的行级过滤规则,应该放在WHERE子句中执行,不需要加入分组字段。

优化后查询语句

SELECT 
SL.[Item No_], 
SUM(SL.[Outstanding Quantity]) AS OutstandingTotalQuantity
FROM [Database$Sales Header] SH
LEFT JOIN [Database$Sales Line] SL ON SL.[Document No_] = SH.[No_]
LEFT JOIN [Database$Items] I ON I.[No_] = SL.[Item No_]
-- 所有行级过滤规则提前到WHERE,分组前执行
WHERE
SH.[Document Type] = '1'
AND I.[Product Code] = 'SHIRT'
AND SH.[Customer No_] <> 'CUST1'
-- 仅保留需要的分组字段,不需要额外加过滤用的字段
GROUP BY 
SL.[Item No_]
ORDER BY
SL.[Item No_]

额外优化说明

原语句GROUP BY中额外携带的SH.[Document Type]、I.[Product Code]也可以直接移除:这两个字段已经在WHERE中固定了筛选值,不需要参与分组逻辑,移除后不会影响统计结果,还能避免不必要的分组维度带来的重复行问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 15:06:07