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.
| titulo | paginas |
|---|---|
| Explorar el cielo | 32 |
| Semillas del barrio | 12 |
| Historias del tren | 24 |
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.
| titulo | paginas |
|---|---|
| Semillas del barrio | 12 |
| Historias del tren | 24 |
| Explorar el cielo | 32 |
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.
| proyecto | votos |
|---|---|
| Horno solar | 18 |
| Filtro de agua | 31 |
| Estación del clima | 25 |
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.
| proyecto | votos |
|---|---|
| Filtro de agua | 31 |
| Estación del clima | 25 |
| Horno solar | 18 |
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.
| nombre | disponibles |
|---|---|
| Telescopio | 3 |
| Brújula | 6 |
| Lupa | 2 |
| Mapa | 4 |
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.
| nombre | disponibles |
|---|---|
| Brújula | 6 |
| Mapa | 4 |
| Telescopio | 3 |
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.
| caja | curso | ejemplares |
|---|---|---|
| Roja | 2 | 18 |
| Azul | 1 | 20 |
| Verde | 2 | 12 |
| Blanca | 1 | 8 |
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.
| caja | curso | ejemplares |
|---|---|---|
| Blanca | 1 | 8 |
| Azul | 1 | 20 |
| Verde | 2 | 12 |
| Roja | 2 | 18 |
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.
| id | equipo | puntos | minutos |
|---|---|---|---|
| 4 | Norte | 90 | 18 |
| 2 | Sur | 95 | 25 |
| 3 | Este | 90 | 18 |
| 1 | Oeste | 90 | 15 |
| 5 | Centro | 80 | 10 |
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.
| id | equipo | puntos | minutos |
|---|---|---|---|
| 2 | Sur | 95 | 25 |
| 1 | Oeste | 90 | 15 |
| 3 | Este | 90 | 18 |
| 4 | Norte | 90 | 18 |
| 5 | Centro | 80 | 10 |
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 →