【问题标题】:MySQL order by index and then duplicates togetherMySQL按索引排序,然后一起复制
【发布时间】:2020-07-20 04:47:50
【问题描述】:

我想让行按 ID 排序,然后按顺序显示重复的行。

例子:

id    color
1     red
2     green
3     yellow
4     green
5     green
6     red

预期:

id    color
1     red
6     red
2     green
4     green
5     green
3     yellow

【问题讨论】:

  • 一个简单的ORDER BY color,id 虽然会得到绿色然后红色然后黄色。这有关系吗?

标签: mysql mariadb sql-order-by


【解决方案1】:

如果您使用的是 MySql 8.0+,您可以使用 MIN() 窗口函数:

select t.id, t.color
from (
  select *,
    min(id) over (partition by color) minid
  from tablename
) t
order by t.minid, id

对于以前的版本:

select t.* from tablename t
order by (select min(id) from tablename where color = t.color), id;

请参阅demo
结果:

| id  | color  |
| --- | ------ |
| 1   | red    |
| 6   | red    |
| 2   | green  |
| 4   | green  |
| 5   | green  |
| 3   | yellow |

【讨论】:

    猜你喜欢
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    • 2021-09-13
    • 2011-11-22
    • 2018-05-12
    相关资源
    最近更新 更多