Я бы подошел к этому с совокупным значением sum()
(доступно в MySQL 8.0):
select
id,
score
from mytable
order by
sum(id = 6) over(order by score desc, id) desc,
score desc,
id
limit 3
Запись заказов sum()
в требуемом направлении;как только запись, имеющая id = 6
, будет достигнута, сумма принимает значение 1
. Это позволяет поставить эти записи на вершине. Остальное - просто добавление дополнительных критериев сортировки и ограничение количества результатов.
Демонстрация на DB Fiddle :
| id | score |
| --- | ----- |
| 6 | 2 |
| 9 | 2 |
| 1 | 1 |
В более ранних версиях mysql вы можете эмулировать сумму окна с помощью пользовательской переменной следующим образом:
select
id,
score
from
(select @sm := 0) s
cross join (select id, score from mytable order by score desc, id) t
order by
case when id = 6 then @sm := @sm + 1 end desc,
score desc,
id
limit 3
Демонстрация на DB Fiddle : те же результаты