Usa order by
. Aquí hay un método:
select t.*
from (select t.*, (@rn := @rn + 1) as seqnum
from tickets t cross join
(select @rn := 0) params
order by vip desc, rand()
) t
order by (seqnum = 1) desc, price asc;
Esto usa la subconsulta para identificar la fila que se debe mantener en la parte superior. Luego usa esta información para ordenar en la consulta externa.
Si sus filas tienen un identificador único, también podría hacer:
select t.*
from tickets t cross join
(select id from tickets where vip = 1 order by rand() limit 1) as t1
order by (t.id = t1.id) desc, price asc;