Ну, вы можете использовать оконные функции для сортировки - если вы выполняете MySQL 8.0:
select code, val
from mytable
order by
row_number() over(partition by val order by code)
* (case when val = 0 then 1 else 5 end),
val,
code
Лог c предназначен для ранжирования записей, имеющих одинаковое значение; тогда для обработки чередования можно использовать простую арифметику (5 0
с, затем 1 1
).
Демонстрация DB Fiddle :
code | val
:----- | --:
data1 | 0
data10 | 0
data11 | 0
data12 | 0
data13 | 0
data2 | 1
data14 | 0
data15 | 0
data3 | 0
data4 | 0
data5 | 0
data8 | 1
data6 | 0
data7 | 0
data9 | 0