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

MySQL:实现重复数值的增量交替排序

纯SQL实现交替排序方案

当然可以只用SQL完成这个交替排序需求,下面分两种MySQL版本给出具体实现:

1. MySQL 8.0及以上版本(支持窗口函数)

利用ROW_NUMBER()窗口函数给每个相同values的行分配组内序号,再通过序号+values排序实现交替效果:

SELECT id, `values`
FROM (
    SELECT 
        id, 
        `values`,
        -- 按values分组,每组内按id排序并分配序号
        ROW_NUMBER() OVER (PARTITION BY `values` ORDER BY id) AS row_num
    FROM test_table -- 替换成你的表名
) AS temp
-- 先按组内序号排序,再按values排序,实现交替
ORDER BY row_num, `values`;

原理说明

  • PARTITION BY \values`将相同values`的行划分为一组
  • ROW_NUMBER()给每组内的行按id(可替换为你需要的排序字段)分配连续序号
  • 外层按row_num升序、values升序排序,就能让不同values的同序号行交替出现

2. MySQL 5.x版本(不支持窗口函数)

用用户自定义变量模拟组内序号分配,同样实现交替排序:

SELECT id, `values`
FROM (
    SELECT 
        id, 
        `values`,
        -- 若当前行values和上一行相同,序号+1,否则重置为1
        @row_num := IF(@current_val = `values`, @row_num + 1, 1) AS row_num,
        @current_val := `values`
    FROM test_table, -- 替换成你的表名
         -- 初始化变量
         (SELECT @row_num := 0, @current_val := NULL) AS vars
    -- 先按values分组,再按id排序,保证变量计算顺序正确
    ORDER BY `values`, id
) AS temp
ORDER BY row_num, `values`;

效果验证

假设原表数据如下:

idvalues
11
21
31
42
52
62

执行上述SQL后,输出结果会是:

idvalues
11
42
21
52
31
62

完全符合1、2、1、2的交替排序需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 01:12:06