SQL查询计算产品订购客户占比结果全为0%问题咨询
SQL占比查询错误修复方案
原语句错误原因
- 分子逻辑错误:使用
Products.productCode(产品编码)作为统计分子,和「订购该产品的客户数」的需求完全不匹配 - 总客户数统计错误:
SUM(customerNumber)是对客户编号字段做数值求和,不是统计总客户数量,统计总客户数应该使用COUNT(*) - 缺少去重逻辑:没有对同一产品的重复订购客户做去重,会导致客户数统计偏高
修改后的SQL语句
SELECT productName, CONCAT( ROUND( COUNT(DISTINCT Customers.customerNumber) / (SELECT COUNT(*) FROM Customers) * 100, 2 ), '%' ) AS CustomerPercentage FROM Customers JOIN Orders ON Orders.customerNumber = Customers.customerNumber JOIN OrderDetails ON OrderDetails.orderNumber = Orders.orderNumber JOIN Products ON Products.productCode = OrderDetails.productCode GROUP BY Products.productCode, productName;
调整说明
- 用
COUNT(DISTINCT Customers.customerNumber)作为分子:正确统计每个产品对应的独立订购客户数量,同一个客户多次订购同一产品仅计数一次 - 总客户数统计替换为
SELECT COUNT(*) FROM Customers:获取全量客户的总数量,作为占比计算的分母 - GROUP BY子句补充
productName:适配开启ONLY_FULL_GROUP_BY模式的SQL环境,避免分组语法报错
内容的提问来源于stack exchange,提问作者Sam J
相关产品推荐
相关产品推荐

