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

Oracle SQL计算两数相对百分比并按百分比区间分组统计方法

偏差区间分组统计实现方案

原SQL的问题

你之前写的筛选SQL存在两处错误,无法得到正确结果:

  • 偏差计算公式错误:目标是统计Number A相对Number B的偏差率,正确公式为ABS((NumberA - NumberB)/NumberB * 100),你写的NumberA/NumberB * 100计算的是A占B的百分比,不是两者的偏差值。以第一行示例数据为例,A=105、B=100,正确偏差是5%,你的公式计算结果为105,完全不符合筛选逻辑。
  • 字段名笔误:后半段筛选条件中写的Number为不存在的字段,会直接报SQL执行错误,应改为NumberB。

基于CASE WHEN的分组统计SQL

直接通过CASE WHEN匹配每行数据对应的偏差区间,再分组计数即可得到你需要的结果,代码如下:

SELECT
    COUNT(*),
    deviation_segment AS Segment
FROM (
    SELECT
        CASE
            WHEN ABS((NumberA - NumberB)/NumberB * 100) BETWEEN 0 AND 6 THEN '0-6%'
            WHEN ABS((NumberA - NumberB)/NumberB * 100) BETWEEN 7 AND 15 THEN '7-15%'
            WHEN ABS((NumberA - NumberB)/NumberB * 100) BETWEEN 16 AND 20 THEN '16-20%'
            -- 可根据业务需要追加更多区间,例如下方20%以上区间的配置
            -- WHEN ABS((NumberA - NumberB)/NumberB * 100) > 20 THEN '20%以上'
            ELSE '未匹配区间'
        END AS deviation_segment
    FROM 你的实际表名
    -- 过滤NumberB为0的记录,避免除零报错
    WHERE NumberB <> 0
) t
GROUP BY deviation_segment;

用你提供的5条示例数据运行上述SQL,得到的统计结果为:

  • 0-6%区间:1行
  • 7-15%区间:2行
  • 16-20%区间:1行
  • 剩余1行偏差约26.3%,如果配置了20%以上区间则归入该档,否则归入未匹配区间

边界提示:如果业务要求区间无重叠无间隙,可将BETWEEN写法改为明确的大小判断,例如将7-15%区间的判断条件写为ABS(...) > 6 AND ABS(...) <=15,避免临界值(如偏差恰好为6%)的归属争议。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 07:30:51