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

如何使用SQL按资源分组计算单列各行占分组总数量的百分比

SQL实现资源报废原因占比计算

核心实现思路

用窗口函数按资源维度统计总报废量,再逐行计算单原因报废量占总报废量的比例即可,不需要做行聚合合并,能保留原表所有报废原因行的结构。

通用SQL写法(支持窗口函数的数据库,如MySQL8.0+、PostgreSQL、Oracle、SQL Server等)

假设你的表名为resource_scrap,代码如下:

SELECT 
    Resource,
    Reason,
    Qty,
    -- 计算数值型百分比,保留2位小数
    ROUND(Qty * 100.0 / SUM(Qty) OVER (PARTITION BY Resource), 2) AS scrap_percent,
    -- 可选:输出带%符号的字符串格式百分比
    CONCAT(ROUND(Qty * 100.0 / SUM(Qty) OVER (PARTITION BY Resource), 2), '%') AS scrap_percent_str
FROM resource_scrap;

逻辑说明

  • SUM(Qty) OVER (PARTITION BY Resource) 是窗口函数,会按Resource字段分组统计每个资源的总报废量,该值会同步到同个资源对应的所有行,不会合并原表行结构,可直接和每行的Qty做除法运算。
  • 乘以100.0而非100是为了强制走浮点运算,避免部分数据库的整数除法规则导致计算结果为0的问题。

旧版本数据库兼容写法(不支持窗口函数,如MySQL5.x)

可以先用子查询统计每个资源的总报废量,再关联原表计算占比:

SELECT 
    t1.Resource,
    t1.Reason,
    t1.Qty,
    ROUND(t1.Qty * 100.0 / t2.total_qty, 2) AS scrap_percent
FROM resource_scrap t1
INNER JOIN (
    SELECT Resource, SUM(Qty) AS total_qty
    FROM resource_scrap
    GROUP BY Resource
) t2 ON t1.Resource = t2.Resource;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:12:00