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

SQL如何实现查询结果内重复字段值不相邻展示

同字段值不相邻排序SQL实现方案

核心逻辑是给相同Name的记录按原始ID升序做组内编号,排序时优先按组内编号,再按Name,即可自动错开相同Name的记录,完全匹配你给出的预期结果。

通用SQL写法(支持所有带窗口函数的数据库,如MySQL 8.0+、PostgreSQL、SQL Server等)

SELECT ID, Name
FROM (
    SELECT 
        ID,
        Name,
        ROW_NUMBER() OVER(PARTITION BY Name ORDER BY ID) AS group_inner_rn
    FROM 你的表名
) temp
ORDER BY group_inner_rn, Name;

低版本MySQL兼容写法(不支持窗口函数的场景)

SELECT ID, Name
FROM (
    SELECT 
        ID,
        Name,
        @rn := IF(@current_name = Name, @rn + 1, 1) AS group_inner_rn,
        @current_name := Name
    FROM 你的表名, (SELECT @rn := 1, @current_name := '') init_vars
    ORDER BY Name, ID
) temp
ORDER BY group_inner_rn, Name;

逻辑说明

  1. 内层查询给每个Name分组下的记录按ID升序编号,比如A类记录编号为1、2,B类为1、2、3,C类为1、2、3、4
  2. 外层先按组内编号排序,再按Name排序,就会依次输出所有组的第1条、所有组的第2条,以此类推,自然不会出现同Name相邻的情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:42:00