按Category ID分组统计条件客户数与总购买量的SQL问题求解
问题原因
- 两个统计客户数的子查询未关联外层的Category ID,是全表范围统计,所以所有类别的客户数结果完全一致
- SELECT中直接使用非关联子查询不符合分组语法规则,同时GROUP BY中额外加入了Total_Customers_1、Total_Customers_10两个计算列,属于多余的错误配置,分组仅需按Category ID维度即可
- 代码存在语法细节错误:Category_ID别名后缺少逗号、SUM计算行末尾多逗号、GROUP BY末尾多逗号
解决方法
用条件聚合替代子查询,在COUNT函数中通过CASE WHEN判断对应条件,仅统计当前分组下符合要求的客户数即可。CASE WHEN不符合条件的返回值为NULL,COUNT统计时会自动忽略NULL值,刚好匹配统计需求,也避免了分组时的子查询语法冲突。
修改后代码如下:
SELECT categoryID AS Category_ID, COUNT(CASE WHEN `Number of Purchases` >= 1 THEN customerID END) AS Total_Customers_1, COUNT(CASE WHEN `Number of Purchases` >= 10 THEN customerID END) AS Total_Customers_10, SUM(`Number of Purchases`) AS Total_Purchases FROM `table` GROUP BY categoryID
如果你的表中购买次数字段实际命名为purchases,把代码中的Number of Purchases替换为purchases即可正常运行,输出结果和你给出的预期完全匹配。
内容的提问来源于stack exchange,提问作者AL0290
相关产品推荐
相关产品推荐

