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

如何用SQL计算基于Customer ID出现次数分组的Quantity贡献占比

实现订单组的Quantity贡献百分比计算

没问题,我来帮你一步步搞定这个需求!先结合示例明确下分组逻辑:组1是OrderID仅出现一次的订单组,组2是OrderID出现多次的订单组,接下来分两步实现:

原始数据参考

|ID | OrderID |Quantity 
|---|-------- |----- 
|1 |10248 |12 
|2 |10248 |10 
|3 |10248 |5 
|4 |10249 |9 
|5 |10249 |40 
|6 |10250 |10 

第一步:计算每个OrderID的总Quantity

首先我们需要聚合每个订单的总数量,这是后续统计占比的基础:

SELECT 
    OrderID,
    SUM(Quantity) AS TotalQuantity
FROM 
    your_table_name  -- 替换成你实际的表名
GROUP BY 
    OrderID;

执行后得到中间结果:

OrderID | TotalQuantity
10248   | 27
10249   | 49
10250   | 10

第二步:计算两组的贡献百分比

这里用CTE(公共表表达式)来实现,逻辑更清晰易懂:

WITH OrderTotals AS (
    SELECT 
        OrderID,
        SUM(Quantity) AS TotalQuantity,
        -- 标记分组:1=该OrderID仅对应1条订单,2=对应多条订单
        CASE WHEN COUNT(*) = 1 THEN 1 ELSE 2 END AS GroupNum
    FROM 
        your_table_name
    GROUP BY 
        OrderID
)
SELECT 
    GroupNum AS `Group`,
    -- 计算百分比并格式化,这里取整显示
    CONCAT(ROUND((SUM(TotalQuantity) / (SELECT SUM(TotalQuantity) FROM OrderTotals)) * 100), '%') AS `% tot Quantity`
FROM 
    OrderTotals
GROUP BY 
    GroupNum
ORDER BY 
    GroupNum;

执行后就能得到你要的最终结果:

Group | % tot Quantity
1     | 12%
2     | 88%

补充说明

  • 如果需要更精确的百分比(比如保留1位小数),可以把ROUND(...)改成ROUND(..., 1)
  • 如果你确实是基于Customer ID来分组(原始表可能遗漏了这个字段),只需要调整CASE里的判断逻辑,比如用COUNT(DISTINCT CustomerID)或者对应分组规则即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:49:04