Pregunta

Digamos que mi relación es así.

enter image description here

y quería ordenar por rango, pero primero los A y B.Entonces mi relación se verá así

enter image description here

Al principio intenté tener solo dos relaciones, ordenándolas por rango y luego uniendo las dos relaciones, pero terminan mezclándose.También intenté usar casos, pero no entiendo cómo funciona.Seguí recibiendo errores al mezclar caracteres con números enteros.

Editar:Olvidé mencionar que la primera relación anterior es con la que termino después de una cantidad algo compleja de vistas.Por ejemplo, creé dos vistas, una que solo tiene clases A y B, luego las ordené por rango.Segunda vista solo clases C, ordenadas por rango.Luego los uní, pero simplemente se mezclan.

¿Fue útil?

Solución

Sólo necesitas un CASE expresión en el ORDER BY, para dividir las filas en dos grupos, de modo que las de clase 'A' o 'B' se coloquen en el primer grupo (1) y todos los demás en el segundo (2):

ORDER BY 
    CASE WHEN class IN ('A', 'B') THEN 1 ELSE 2 END,
    rank ;

Otros consejos

Les voy a dar un ejemplo de una forma de hacerlo, donde uso CTE, que están disponibles en muchas bases de datos, particularmente PostgreSQL, con el que estoy más familiarizado.

CTE y el WITH cláusula

CTE le permite formar estructuras temporales similares a tablas de consulta única, pero dado que puede hacer que los CTE dependan unos de otros en una sola consulta, proporciona una manera conveniente y fácil de entender de hacer que su consulta sea semiprocedimental.

En tu caso lo intentaría

WITH AB_results AS(
  SELECT class, rank, 1 AS hidden_rank
  FROM my_relation
  WHERE class IN ('A','B')
),
Non_AB_results AS(
  SELECT class, rank, 2 AS hidden_rank
  FROM my_relation
  WHERE class NOT IN ('A','B')
)
SELECT COALESCE(AB_results.class,Non_AB_results.class), rank
FROM AB_results
FULL OUTER JOIN Non_AB_results
USING(hidden_rank,rank)
ORDER BY hidden_rank, rank;

Intentaré armar un SQLFiddle en un par de minutos aquí, solo para asegurarme de no haberme equivocado en algunas de mis consultas.:PAG

EDITAR:Cometí un pequeño error.Intentando limpiarlo con un ejemplo mientras hablamos.

EDITAR 2:¡El error ya está corregido!Desafortunadamente, SQLFiddle está teniendo algunos problemas en este momento, pero AQUÍ es el enlace a SQLFiddle para algunas pruebas.

tenga en cuenta Quizás no haya resuelto esto de la manera más elegante posible, pero debería resolver sus problemas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a dba.stackexchange
scroll top