Northwind数据库MySQL查询:统计至少2位不同客户订购的产品及客户数
MySQL查询语句修正方案
原SQL存在的问题
- JOIN语法错误:
joinorder detailsoon缺少空格,应为表别名o后接关联关键字on - 第二个表关联错误:
Orders表关联时误用WHERE指定关联条件,应使用ON - 客户计数未去重:直接使用
count(CustomerId)会重复统计同一客户的多次订购记录,需用DISTINCT去重 - 多余过滤条件:
Quantity>=2不符合需求,需求是至少2位不同客户订购,不是单次订购数量≥2 - 缺少分组后过滤条件:没有用
HAVING筛选出满足「不同客户数≥2」的分组结果
修正后的SQL
SELECT p.ProductID, p.ProductName, COUNT(DISTINCT kk.CustomerId) AS distinct_customer_count FROM Products p INNER JOIN `order details` o ON p.ProductID = o.ProductID INNER JOIN Orders kk ON kk.OrderID = o.OrderID GROUP BY p.ProductID, p.ProductName HAVING distinct_customer_count >= 2 ORDER BY p.ProductID;
关键逻辑说明
- 用
COUNT(DISTINCT kk.CustomerId)保证同一个客户多次订购同一产品时仅计数1次 - 分组后通过
HAVING子句过滤,仅保留有至少2位不同客户订购的产品 GROUP BY同时包含ProductID和ProductName符合MySQL的ONLY_FULL_GROUP_BY模式规范,避免语法报错
内容的提问来源于stack exchange,提问作者Liroy Levi
相关产品推荐
相关产品推荐

