SQL语句正确性验证:查询跨品类购买客户ID
SQL查询语句验证:获取购买过多品类产品的客户ID
需求明确
获取购买过不同品类产品的客户的customer_id
原查询的问题
原查询存在多处逻辑错误,无法满足需求:
- 表别名错误:
customer表未定义别名c,但关联条件中使用了c.customer_id,执行时会触发语法错误 - 分组逻辑错误:按
pc.product_category_id分组,最终结果会是每个品类对应的客户集合,而非按客户维度统计其购买的品类数量 - Having条件无效:
count(p.product_id)>0无筛选意义,关联后的结果只要存在购买记录,该值必然大于0,无法筛选出购买过多品类的客户
正确的查询语句
SELECT customer_id FROM customer JOIN Purchase_order po ON customer.customer_id = po.customer_id JOIN order_product op ON po.order_id = op.order_id JOIN product p ON op.product_id = p.product_id JOIN product_category pc ON p.product_category_id = pc.product_category_id GROUP BY customer_id HAVING COUNT(DISTINCT pc.product_category_id) > 1;
关键逻辑说明
- 修正表别名问题:直接使用
customer表名关联,也可自行定义别名(如customer c)并统一使用 - 分组维度调整:按
customer_id分组,确保统计每个客户的购买品类情况 - 品类统计方式:使用
COUNT(DISTINCT pc.product_category_id)计算客户购买的不同品类数量,通过HAVING COUNT(...) > 1筛选出购买过至少两种不同品类产品的客户
内容的提问来源于stack exchange,提问作者Seb
相关产品推荐
相关产品推荐

