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

如何使用MySQL对数值按10000步长分桶且桶编号从0开始?

实现方案

你原来的写法得到100、101这类结果是因为没有减去起始值对应的偏移量,按如下逻辑编写SQL即可满足需求:

  1. 桶编号计算:先减去分桶起始值1000000再除以间隔10000后取整,即可得到从0开始的桶号
  2. 区间范围计算:通过桶号反推区间左右边界,再拼接为字符串即可

通用SQL写法(兼容大多数SQL引擎,如MySQL、PostgreSQL、Hive等)

SELECT 
  distance,
  FLOOR((distance - 1000000)/10000) AS bucket,
  CONCAT(
    1000000 + FLOOR((distance - 1000000)/10000)*10000,
    ' - ',
    1000000 + FLOOR((distance - 1000000)/10000)*10000 + 9999
  ) AS `range`
FROM data;

简化写法(使用CTE避免重复计算,逻辑更清晰)

WITH bucket_temp AS (
  SELECT 
    distance,
    FLOOR((distance - 1000000)/10000) AS bucket
  FROM data
)
SELECT 
  distance,
  bucket,
  CONCAT(1000000 + bucket*10000, ' - ', 1000000 + bucket*10000 + 9999) AS `range`
FROM bucket_temp;

补充说明

如果存在小于1000000的distance值,会得到负数的桶编号,若不需要这类数据可在查询中添加WHERE distance >= 1000000过滤即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:57:03