SQL BÁSICO E INTERMEDIO · POSTGRESQL

Ejercicios SQL ORDER BY resueltos

Cinco prácticas progresivas para ordenar resultados, combinar criterios y resolver empates.

Todos los datos son ficticios. Intentá resolver cada consigna antes de leer su solución. Podés repasar las guías de SELECT y WHERE si necesitás recordar cómo elegir columnas y filtrar filas. Esta guía se puede leer sin cuenta ni JavaScript.

¿Para qué sirve ORDER BY?

ORDER BY establece el orden de las filas del resultado sin modificar la tabla. Se escribe después de FROM y de WHERE, si hay un filtro. Sin esta cláusula, PostgreSQL no garantiza el orden de las filas.

SELECT columna_1, columna_2 FROM tabla
ORDER BY columna_1 ASC, columna_2 DESC;

ASC indica orden ascendente (números de menor a mayor) y es el valor predeterminado. DESC indica orden descendente (de mayor a menor). Para texto, el orden depende de la configuración de comparación de la base de datos; estos ejemplos evitan empates por acentos o mayúsculas.

Con varias columnas, la segunda solo desempata las filas que coinciden en la primera; la tercera desempata las que coinciden en las dos anteriores. Indicá la dirección de cada columna por separado. Si todas las claves empatan, el orden entre esas filas no está garantizado: agregá una clave única cuando necesites un resultado totalmente determinado.

Usamos PostgreSQL: TEXT representa texto e INTEGER, números enteros. Los ejemplos no tienen valores nulos. En PostgreSQL, por defecto ASC coloca los NULL al final y DESC al principio; podés indicarlo con NULLS FIRST o NULLS LAST.

1. Ordenar de menor a mayor con ASC

Consigna: Para organizar las lecturas del mes, mostrá titulo y paginas de los cuadernillos, desde el más corto hasta el más largo.

Esquema de cuadernillos: titulo TEXT, paginas INTEGER.

Tabla cuadernillos · datos ficticios
titulopaginas
Explorar el cielo32
Semillas del barrio12
Historias del tren24

Solución explicada

SELECT titulo, paginas
FROM cuadernillos
ORDER BY paginas ASC;

ASC ordena los números de menor a mayor: 12, 24 y 32. Es la dirección predeterminada, por lo que ORDER BY paginas produciría el mismo resultado. Cambia la presentación, no los datos guardados.

Resultado esperado · filas en el orden solicitado
titulopaginas
Semillas del barrio12
Historias del tren24
Explorar el cielo32

2. Ordenar de mayor a menor con DESC

Consigna: La feria de ciencias quiere revisar primero los proyectos con más votos. Mostrá proyecto y votos de mayor a menor cantidad de votos.

Esquema de feria: proyecto TEXT, votos INTEGER.

Tabla feria · datos ficticios
proyectovotos
Horno solar18
Filtro de agua31
Estación del clima25

Solución explicada

SELECT proyecto, votos
FROM feria
ORDER BY votos DESC;

DESC invierte la dirección: aparecen primero 31 votos, después 25 y finalmente 18. No elimina proyectos ni calcula un total; conserva las tres filas y solo las ordena.

Resultado esperado · filas en el orden solicitado
proyectovotos
Filtro de agua31
Estación del clima25
Horno solar18

3. Filtrar y después ordenar

Consigna: Para preparar una salida de observación, mostrá nombre y disponibles de los equipos que tengan al menos 3 unidades, ordenados alfabéticamente por nombre.

Esquema de equipos: nombre TEXT, disponibles INTEGER.

Tabla equipos · datos ficticios
nombredisponibles
Telescopio3
Brújula6
Lupa2
Mapa4

Solución explicada

SELECT nombre, disponibles
FROM equipos
WHERE disponibles >= 3
ORDER BY nombre ASC;

WHERE deja fuera Lupa porque solo tiene 2 unidades. ORDER BY se escribe después del filtro y ordena las filas restantes por nombre: Brújula, Mapa y Telescopio. Las cantidades siguen asociadas con su equipo; no se ordena cada columna por separado.

Resultado esperado · filas en el orden solicitado
nombredisponibles
Brújula6
Mapa4
Telescopio3

4. Desempatar con una segunda columna

Consigna: La biblioteca entrega cajas de libros. Mostrá caja, curso y ejemplares, primero por curso de menor a mayor y, dentro de cada curso, por ejemplares de menor a mayor.

Esquema de cajas: caja TEXT, curso INTEGER, ejemplares INTEGER.

Tabla cajas · datos ficticios
cajacursoejemplares
Roja218
Azul120
Verde212
Blanca18

Solución explicada

SELECT caja, curso, ejemplares
FROM cajas
ORDER BY curso ASC, ejemplares ASC;

Las claves se leen de izquierda a derecha: primero curso, y solo cuando el curso coincide se compara ejemplares. Por eso Azul (curso 1, 20 ejemplares) aparece antes que Verde (curso 2, 12), aunque 20 sea mayor que 12. No se agrupan ni se suman filas.

Resultado esperado · filas en el orden solicitado
cajacursoejemplares
Blanca18
Azul120
Verde212
Roja218

5. Combinar direcciones y resolver empates

Consigna: Para un desafío escolar, mostrá id, equipo, puntos y minutos. Ordená por puntos de mayor a menor; si empatan, por minutos de menor a mayor; si ambos valores coinciden, por id de menor a mayor. Cada id es único.

Esquema de desafio: id INTEGER PRIMARY KEY, equipo TEXT, puntos INTEGER, minutos INTEGER.

Tabla desafio · datos ficticios
idequipopuntosminutos
4Norte9018
2Sur9525
3Este9018
1Oeste9015
5Centro8010

Solución explicada

SELECT id, equipo, puntos, minutos
FROM desafio
ORDER BY puntos DESC, minutos ASC, id ASC;

Cada columna tiene su propia dirección: DESC solo se aplica a puntos. Sur va primero por sus 95 puntos; entre los equipos con 90 gana posición el de menos minutos. Este y Norte empatan en puntos y tiempo, así que id resuelve su orden. PRIMARY KEY hace que id sea único y no nulo: esta última clave garantiza un orden completo y reproducible.

Resultado esperado · filas en el orden solicitado
idequipopuntosminutos
2Sur9525
1Oeste9015
3Este9018
4Norte9018
5Centro8010

Llevá ORDER BY al aula

Anticipá el orden de las filas antes de leer cada solución. Después intercambiá las columnas de ORDER BY o cambiá una dirección y explicá cómo se modifica el resultado.

En el generador gratuito podés elegir ORDER BY, nivel básico o intermedio, y 1, 2 o 5 ejercicios. Descargá la actividad y las soluciones por separado en PDF o imprimilas.

Crear una actividad SQL gratuita →