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

SQL Server两个查询的差异:返回的productID是否相同?

两个SQL查询的差异解析

先看两个查询的代码:

查询1代码

SELECT 
    productID,
    SUM(soldQty)
FROM
    Sales
WHERE
    soldQty <> 0
GROUP BY  
    ProductID

查询1返回的productID

这个查询会先过滤掉所有soldQty等于0的行,再按productID分组计算剩余行的soldQty总和。最终返回的是所有至少存在一条非0soldQty记录,且这些非0记录的总和不等于0的productID。
如果某个productID的所有非0记录总和为0,哪怕它还有soldQty为0的记录,也不会被返回。


查询2代码

SELECT
    productID,
    SUM(soldQty)
FROM
    Sales
GROUP BY 
    ProductID
HAVING
    SUM(soldQty) <> 0

查询2返回的productID

这个查询会先按productID分组,计算该ID下所有行(包括soldQty为0的行)的soldQty总和,再过滤掉总和等于0的分组。最终返回的是所有分组后soldQty总和不等于0的productID。


二者结果是否相同?

结果是完全相同的。原因如下:

  • 对于任意productID,它的所有行的soldQty总和,等于它的非0soldQty记录的总和(因为0加进去不会改变总和)。
  • 因此,“非0记录的总和不等于0”和“所有行的总和不等于0”是等价条件。
  • 同时,若某个productID只有soldQty为0的记录,两个查询都不会返回它;若存在非0记录但总和为0,两个查询也都不会返回它;若总和不为0,两个查询都会返回它。

唯一的区别是性能:查询1先过滤掉0的行,分组时处理的数据量更少,在数据量大的场景下性能会更优。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 13:32:48