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;
逻辑说明
- 内层查询给每个
Name分组下的记录按ID升序编号,比如A类记录编号为1、2,B类为1、2、3,C类为1、2、3、4 - 外层先按组内编号排序,再按
Name排序,就会依次输出所有组的第1条、所有组的第2条,以此类推,自然不会出现同Name相邻的情况
内容的提问来源于stack exchange,提问作者user3060430
相关产品推荐
相关产品推荐

