You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL查询2014年购买饮料类满5次的Top10客户总销售额

需求梳理

需要提取2014年购买「Beverages(饮料)」类别商品次数≥5次的前10名客户数据,返回字段包括sales.customers表客户信息、统计年份、总销售额。

原SQL存在的问题
  • 多层重复关联相同表,嵌套层级过深,扫描数据量大,执行效率极低
  • 购买次数过滤的HAVING子句被注释,且放置位置错误
  • 多个子查询内部无意义添加ORDER BY,部分数据库会直接触发语法报错
  • 混用RIGHT JOIN和INNER JOIN,逻辑混乱易产生空值异常
  • 购买次数统计逻辑错误:未对订单ID去重,同一订单含多个饮料商品时会重复计数,排序错误使用SUM(R.CUSTID)无实际业务意义
  • 购买次数筛选和销售额计算逻辑完全割裂,易出现数据匹配错误
优化后可直接运行的SQL
WITH beverage_cust_2014 AS (
    SELECT
        o.custid,
        COUNT(DISTINCT o.orderid) AS purchase_cnt,
        SUM(od.unitprice * od.qty * (1 - od.discount)) AS gross_sales
    FROM sales.orders o
    INNER JOIN sales.orderdetails od
        ON o.orderid = od.orderid
    INNER JOIN production.products p
        ON od.productid = p.productid
    INNER JOIN production.categories c
        ON p.categoryid = c.categoryid
    WHERE
        c.categoryname = 'Beverages'
        AND YEAR(o.orderdate) = 2014
    GROUP BY o.custid
    HAVING purchase_cnt >= 5
    ORDER BY purchase_cnt DESC
    LIMIT 10
)
SELECT
    cust.companyname,
    2014 AS year,
    bc.gross_sales
    -- 如需返回customers表其他字段,直接在这部分添加即可
FROM beverage_cust_2014 bc
INNER JOIN sales.customers cust
    ON bc.custid = cust.custid;

如果需要统计的是客户2014年全品类总销售额而非仅饮料类销售额,只需要把CTE中gross_sales的计算逻辑替换为关联全品类订单重新汇总即可。

数据库ER图参考

数据库ER关系图

内容的提问来源于stack exchange,提问作者WAATS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 05:03:20