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

SQL实现数值匹配3-3-4规则区间分桶的高效查询方法

3-3-4规则数值分桶高效匹配方案

核心计算逻辑

这套分桶是标准的每10个数值为一个周期,按3个、3个、4个的长度循环切分的规则,不需要维护分桶维表做关联,纯数学计算就能以O(1)复杂度完成匹配,数据量越大效率优势越明显,计算步骤如下:

  • 先做计数偏移:将输入值减1,把从1开始的计数对齐到0起点,适配取模、整除运算
  • 计算周期位置:对偏移后的值做10的取模运算,得到当前值在所属10位周期内的位置(范围0-9)
  • 匹配桶区间:
    • 周期位置0-2(对应周期内第1-3个数):桶起点为「整除10的结果*10 +1」,终点为起点+2
    • 周期位置3-5(对应周期内第4-6个数):桶起点为「整除10的结果*10 +4」,终点为起点+2
    • 周期位置6-9(对应周期内第7-10个数):桶起点为「整除10的结果*10 +7」,终点为起点+3
  • 拼接起点和终点就是最终的分桶名称

验证示例:输入5,偏移后是4,取模10得4属于3-5区间,整除10得0,对应桶4-6,和规则一致;输入18,偏移后17,取模10得7属于6-9区间,整除10得1,对应桶17-20,和规则一致。

SQL实现语句

以下写法兼容绝大多数主流SQL引擎(MySQL、Hive、Spark SQL、ClickHouse等),直接替换业务表和字段名即可使用:

SELECT
    input_num, -- 替换为你的数值字段名
    CASE
        WHEN MOD(input_num - 1, 10) BETWEEN 0 AND 2 
            THEN CONCAT( FLOOR((input_num - 1)/10)*10 + 1, '-', FLOOR((input_num - 1)/10)*10 + 3 )
        WHEN MOD(input_num - 1, 10) BETWEEN 3 AND 5 
            THEN CONCAT( FLOOR((input_num - 1)/10)*10 + 4, '-', FLOOR((input_num - 1)/10)*10 + 6 )
        WHEN MOD(input_num - 1, 10) BETWEEN 6 AND 9 
            THEN CONCAT( FLOOR((input_num - 1)/10)*10 + 7, '-', FLOOR((input_num - 1)/10)*10 + 10 )
        -- 可选:超出业务数值范围的异常值返回自定义标识,按需开启
        -- ELSE 'invalid_num'
    END AS belong_bucket
FROM your_table -- 替换为你的业务表名

测试验证结果

用示例值和边界值跑数结果如下,完全匹配分桶规则:

  • 1 → 1-3
  • 5 → 4-6
  • 10 → 7-10
  • 13 → 11-13
  • 18 → 17-20
  • 26 → 24-26
  • 30 → 27-30

如果后续数值范围扩展到30以上,这套逻辑不需要任何修改,会自动按3-3-4的循环规则生成对应分桶,比如31会匹配31-33、36匹配34-36、40匹配37-40。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 11:01:07