使用SQL查询sale表中客户购买最多的热门产品名(查询失败求助)
查询始终失败的核心原因
你当前描述的sale表结构存在关键信息缺失:要计算"购买某产品的客户最多"这个指标,必须要有能区分不同购买者的客户唯一标识字段(比如客户ID、注册手机号这类),但目前你提到的表只有产品名(Description)、单笔购买数量(quantity)两个字段,从数据逻辑上就不可能统计出每个产品对应有多少独立客户购买,这就是之前写了多条SQL都拿不到正确结果的根源。
可直接落地的查询方案
场景1:表本身没有客户标识字段,将"最受欢迎"定义为累计总销量最高的产品
没有客户维度数据的前提下,只能基于现有字段统计总销量第一的产品,对应SQL:
-- 先按产品聚合计算每个产品的累计总销量,再筛选出总销量和全表最高值相等的产品 WITH product_total AS ( SELECT Description, SUM(quantity) AS total_sales FROM sale GROUP BY Description ) SELECT Description FROM product_total WHERE total_sales = (SELECT MAX(total_sales) FROM product_total);
避坑提醒:不要用
ORDER BY total_sales DESC LIMIT 1这类写法,如果有多个产品销量并列第一,这种写法会漏掉其他同量级的结果。
场景2:表实际存在客户唯一标识字段(如CustomerID),按原始需求"去重购买客户数最多"查询
确认表内有客户标识字段后,严格匹配需求逻辑的SQL:
-- 先按产品聚合统计每个产品的独立购买客户数,再筛选出客户数最高的产品 WITH product_buyer_stat AS ( SELECT Description, COUNT(DISTINCT CustomerID) AS buyer_count FROM sale GROUP BY Description ) SELECT Description FROM product_buyer_stat WHERE buyer_count = (SELECT MAX(buyer_count) FROM product_buyer_stat);
常见错误点排查
- 不要直接把
quantity字段当客户数用,这个字段是单条销售记录的商品购买数量,和独立客户数完全不是一个维度 - 聚合统计时必须按
Description做分组,否则会出现全表汇总成单条结果的逻辑错误
内容的提问来源于stack exchange,提问作者Jamshed Salik
相关产品推荐
相关产品推荐

