如何用SQL统计客户购买的不同产品类型数量(含错误SQL修正)
错误分析
- 使用
UNION逻辑错误:UNION要求合并的两个查询必须列数一致、对应列数据类型匹配,你的两个查询分别返回单一列(客户ID、计数),无法通过UNION得到“每个客户对应购买数量”的关联结果。 - 语法错误:
customer_id = c.customer id存在空格笔误,正确写法应为c.customer_id。 - 表关联缺失:未将
customer_table与purchase_table做关联匹配,无法对应到每个客户的购买记录。
正确SQL实现
方式一:左连接+分组统计(推荐,包含无购买记录的客户)
SELECT c.customer_id, COUNT(DISTINCT p.product_id) AS distinct_product_count FROM customer_table c LEFT JOIN purchase_table p ON c.customer_id = p.customer_id GROUP BY c.customer_id;
LEFT JOIN保证所有客户都会被返回,无购买记录的客户计数为0。COUNT(DISTINCT p.product_id)用于统计每个客户购买的不同产品数量,DISTINCT可剔除同一产品的重复购买记录。
方式二:关联子查询
SELECT c.customer_id, COALESCE((SELECT COUNT(DISTINCT product_id) FROM purchase_table p WHERE p.customer_id = c.customer_id), 0) AS distinct_product_count FROM customer_table c;
- 子查询针对每个客户单独统计购买的不同产品数量,
COALESCE函数将无购买记录客户的NULL结果转为0。
内容的提问来源于stack exchange,提问作者Michael Xia
相关产品推荐
相关产品推荐

