MySQL упорядочить по индексу, а затем дублировать вместе - PullRequest
0 голосов
/ 08 апреля 2020

Я хочу, чтобы строки сортировались по 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

1 Ответ

0 голосов
/ 08 апреля 2020

Если вы используете 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;

См. Демонстрационную версию . Результаты:

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