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

基于多条件生成含SUM聚合列的SQL分组统计表问题咨询

错误原因

  1. 子查询未关联外层分组维度:你写的两个计数子查询默认统计全表符合购买次数条件的记录数,没有限制和外层当前行的Category ID一致,所以所有分类的计数结果都相同。
  2. 存在语法错误:原始代码SELECT子句第一行末尾缺逗号,GROUP BY后多余了两个聚合结果字段,语句末尾多逗号,都会触发语法报错。
  3. 逻辑冗余:不需要用子查询实现分组内的条件计数,用条件聚合写法更简洁高效。

推荐解决方案(兼容绝大多数SQL数据库)

使用CASE WHEN配合聚合函数实现分组内的条件计数,写法如下:

SELECT 
  categoryID AS Category_ID,
  COUNT(CASE WHEN "Number of Purchases" >= 3 THEN customerID END) AS Total_Customers_3,
  COUNT(CASE WHEN "Number of Purchases" >= 5 THEN customerID END) AS Total_Customers_5,
  SUM("Number of Purchases") AS Total_Purchases
FROM table
GROUP BY categoryID

逻辑说明

  • 按categoryID分组后,CASE WHEN会对当前分类下的每条记录做判断:符合购买次数条件就返回customerID,不符合返回NULL
  • COUNT统计时会自动忽略NULL值,最终得到每个分类下符合对应条件的客户数量
  • 如果存在同一个客户在同一分类下有多条记录的场景,把COUNT改成COUNT(DISTINCT customerID)即可实现去重统计

子查询写法(不推荐,性能较差,仅作错误修正参考)

如果你坚持用子查询实现,需要补充子查询和外层的分类关联条件:

SELECT 
  t1.categoryID AS Category_ID,
  (SELECT COUNT(t2.customerID) FROM table t2 WHERE t2.categoryID = t1.categoryID AND t2."Number of Purchases" >=3) AS Total_Customers_3,
  (SELECT COUNT(t2.customerID) FROM table t2 WHERE t2.categoryID = t1.categoryID AND t2."Number of Purchases" >=5) AS Total_Customers_5,
  SUM(t1."Number of Purchases") AS Total_Purchases
FROM table t1
GROUP BY t1.categoryID

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:09:03