(yo habría escrito esto como un comentario sobre la respuesta de Michel Tobón, pero no tienen la reputación, lo siento :-)
"y funcionó ... ¿Por qué? Es mejor que yo, pero acaba de hacer ; inténtalo también ".
La razón por la que funciona es porque su expresión "code! = 'USA'" está produciendo un resultado booleano, que en SQL se representa como 1 o 0. Entonces, la expresión "code = 'USA' produce un 1 por cada registro que coincida con ese criterio, y un 0 por cada registro que no lo haga. Debido a que 1 es posterior a 0 en una clasificación ascendente (el valor predeterminado), los registros coincidentes se ordenarán más tarde que los que no coinciden. .
Otra forma (posiblemente más clara) de producir el mismo resultado sería la siguiente:
SELECT * FROM countries ORDER BY code='USA' DESC, code='CAN' DESC, name ASC
por supuesto, en una cambiar la pregunta del OP, me gusta más la opción FIELD(): bastante limpia :-)
Lucas Rossini La solución de Ferreira es mucho más simple que esto. – mkataja
sí, tienes razón –