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

MySQL中按col_2分组聚合col_1的连续值范围并生成指定结果

解决MySQL连续数值分组并生成范围的问题

这是个典型的连续数值分组场景,咱们可以借助MySQL的窗口函数来高效实现需求。先理清楚思路,再看具体代码:

示例数据(筛选col_2=3后)

col_1col_2
13
33
43
73
83
93

预期结果

startendcol_2
1-3
343
793

实现SQL代码

SELECT
    MIN(col_1) AS start,
    CASE 
        WHEN MAX(col_1) = MIN(col_1) THEN '-' 
        ELSE CAST(MAX(col_1) AS CHAR) 
    END AS end,
    col_2
FROM (
    SELECT
        col_1,
        col_2,
        -- 生成连续数值的分组标识:连续数减去递增行号结果一致
        col_1 - ROW_NUMBER() OVER (PARTITION BY col_2 ORDER BY col_1) AS grp
    FROM mytbl
    WHERE col_2 = 3
) t
GROUP BY col_2, grp
ORDER BY start;

代码逻辑拆解

  1. 子查询分组标识生成:

    • 先筛选col_2=3的记录,按col_1排序。
    • 用col_1 - ROW_NUMBER()生成分组字段grp:连续的col_1值减去递增的行号,结果会保持相同(比如3、4对应的行号是2、3,3-2=1,4-3=1,属于同一组;1对应的行号是1,1-1=0,单独成组)。
  2. 外层查询生成结果:

    • 按col_2和grp分组,取每组最小col_1作为start。
    • 用CASE判断:如果组内只有单个值(最大=最小),则end显示'-';否则显示最大col_1。
    • 最后按start排序,保证结果顺序符合预期。

运行这段代码后,就能得到你想要的结果啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:16:31