Yo entiendo la lógica del CASE en un SELECT, no te preocupes. Tengo cierta experiencia con MySQL...
Personalmente, el uso de CASE en un SELECT la considero una solución de programadores, no de DBA. Se procura evitar usar en esa forma porque tiene serios problemas de performance cuando las consultas aplican a tablas más grandes, ya que trata los valores como cadenas de texto, con lo que muchas veces genera demasiado uso de memoria (un "0" y un 0 ocupan diferente cantidad de memoria), además de conversiones implícitas innecesarias.
Es preferible el uso de IF, y no CASE para cosas como lo que quieres.
Algo como:
Código MySQL:
Ver originalSELECT *, IF(fecha
` IS NULL, 1, 0) ConFecha, RAND() Aleatorio FROM usuarios
ORDER BY ConFecha, Aleatorio;
De todos modos es tu decisión.
Nota: El AS es irrelevante, sólo sirve para ensuciar el código y ya no es parte del estandar ANSI SQL. Procura no usarlo.
Sólo se conserva por compatibilidad, pero las directivas de desarrollo en las empresas de software especifican que no se lo use (estoy segur, trabajo en una).