Haces dos preguntas:
1.
¿Por qué no puedo hacer referencia al alias de costo SELECT en la cláusula WHERE?
2.
Pero, ¿por qué ordenar por costo desc; está permitido?
El manual tiene una respuesta para ambos aquí:
El nombre de una columna de salida se puede usar para hacer referencia al valor de la columna en ORDER BY
y GROUP BY
cláusulas, pero no en el WHERE
o HAVING
cláusulas; allí debe escribir la expresión en su lugar.
Está definido por el estándar SQL y la razón es la secuencia de eventos en un SELECT
consulta. A la hora WHERE
se aplican cláusulas, columnas de salida en el SELECT
la lista aún no ha sido calculada. Pero cuando se trata de ORDER BY
, las columnas de salida están disponibles.
Entonces, si bien esto es inconveniente y confuso al principio, todavía tiene sentido.
Relacionado:
- PostgreSQL Donde cuenta la condición
- La mejor manera de obtener el recuento de resultados antes de aplicar LIMIT