SQL Server如何统计总销量超过指定阈值的商品数量
错误原因分析
- 你编写的第二个SQL缺少
GROUP BY ItemID子句,SQL会默认将整张TransactionEntry表作为一个聚合分组计算:- 首先判断
HAVING Sum(Quantity) >3500条件:因为统计的是全表总销量,几乎必然满足过滤要求 - 此时
Count(ItemID)统计的是整张表所有行的ItemID数量,也就是表的总行数,所以返回了241010这个远大于预期的值
- 首先判断
- 你最初的SQL是按ItemID分组后过滤得到符合条件的5个商品,要统计这个结果的行数,需要先完成分组过滤逻辑,再对最终结果集计数。
正确SQL写法
写法1:子查询包裹(兼容性最好)
SELECT COUNT(*) AS 符合条件的商品总数 FROM ( SELECT ItemID FROM TransactionEntry GROUP BY ItemID HAVING SUM(Quantity) > 3500 ) AS qualified_item
写法2:CTE写法(可读性更强,SQL Server原生支持)
WITH QualifiedItems AS ( SELECT ItemID FROM TransactionEntry GROUP BY ItemID HAVING SUM(Quantity) > 3500 ) SELECT COUNT(*) AS 符合条件的商品总数 FROM QualifiedItems
内容的提问来源于stack exchange,提问作者user16603211
相关产品推荐
相关产品推荐

