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

如何对小数数据集按自定义范围分组并实现聚合计数(无需临时表)

小数列表按指定范围分组统计的实现方案

不用临时表的话,可通过嵌套子查询直接实现,核心思路是先计算数据集的关键参数,再给每个数值分配所属组,最后生成区间并统计数量。

示例SQL(以MySQL为例)

假设数据存在表nums的value列中,指定除数为2:

SELECT
    ROUND(CASE 
            WHEN grp = 0 THEN 0
            ELSE grp * s.step + 0.01 
        END, 2) AS RangeStart,
    ROUND(CASE 
            WHEN grp = s.divisor - 1 THEN s.max_val
            ELSE (grp + 1) * s.step 
        END, 2) AS RangeEnd,
    COUNT(*) AS Count
FROM (
    SELECT 
        value,
        LEAST(FLOOR(value / s.step), s.divisor - 1) AS grp
    FROM nums,
    (SELECT 
        MAX(value) AS max_val, 
        ROUND(MAX(value)/2, 2) AS step,
        2 AS divisor
     FROM nums) s
) t
GROUP BY grp, s.step, s.max_val, s.divisor
ORDER BY grp;

逻辑拆解

  1. 计算基础参数:内层子查询s算出三个核心值

    • max_val:数据集最大值,保证区间上限覆盖所有数据
    • step:每组区间长度,由最大值/除数计算并保留两位小数
    • divisor:你指定的分组数量除数
  2. 分配组号:中间层子查询t给每个数值打组标签

    • 用FLOOR(value/step)算出基础组号
    • 用LEAST确保最大值不会超出预设分组数(比如除数为2时,组号只能是0或1)
  3. 生成区间并统计:外层查询完成最终输出

    • 第一组起始为0,结束为step
    • 后续组起始为上一组结束值+0.01(避免区间重叠),结束为(组号+1)*step
    • 最后一组直接用数据集最大值做结束,规避浮点计算误差
    • 统计每组的数值数量

适配你的示例数据集

输入数据:150.75、250.01、600.10、900.50,除数为2时,执行上述SQL会得到:

RangeStartRangeEndCount
0.00450.252
450.26900.502

(注:你提供的示例中第二组结束值为1000属于笔误,实际会以数据集最大值900.50作为区间上限;若需要向上取整到整数,可将MAX(value)替换为CEIL(MAX(value)))

灵活调整

  • 修改子查询s中的divisor值即可改变分组数量,比如除数为3时会分成3组
  • 调整ROUND函数的小数位数,可匹配你的数据精度需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 14:40:30