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