Ordenando y eliminando duplicados: ORDER BY y DISTINCT
Hasta ahora, los resultados se muestran en el orden en que están almacenados. Con ORDER BY puedes controlar el orden, y con DISTINCT puedes eliminar valores duplicados.
ORDER BY: Ordenar resultados
SELECT columnas
FROM tabla
ORDER BY columna ASC|DESC;ASC(ascendente): De menor a mayor. Es el valor por defecto.DESC(descendente): De mayor a menor.
DISTINCT: Eliminar duplicados
SELECT DISTINCT columna
FROM tabla;DISTINCT elimina las filas duplicadas del resultado, devolviendo solo valores únicos.
LIMIT y OFFSET: Paginación
LIMIT restringe el número de filas que devuelve una consulta. Es imprescindible cuando trabajas con tablas grandes y solo necesitas una porción de los datos:
SELECT * FROM tabla
LIMIT cantidad;OFFSET indica cuántas filas saltar antes de empezar a devolver resultados. Combinado con LIMIT, te permite paginar los datos, igual que cuando navegas entre páginas de resultados en una web:
SELECT * FROM tabla
LIMIT cantidad OFFSET salto;Por ejemplo, si quieres mostrar 10 resultados por página, la página 3 se obtendría así:
SELECT * FROM videogames
LIMIT 10 OFFSET 20;Esto salta las primeras 20 filas (páginas 1 y 2) y devuelve las siguientes 10 (página 3).
Otro uso muy habitual es obtener un “top N”. Por ejemplo, los 3 juegos con más horas de juego:
SELECT title, playtime_hours FROM videogames
ORDER BY playtime_hours DESC
LIMIT 3;Ordenar por múltiples columnas
Puedes ordenar por más de una columna separándolas por comas. SQL ordena primero por la primera columna; cuando hay empates, usa la segunda para desempatar. Cada columna puede tener su propia dirección (ASC o DESC):
SELECT title, year, playtime_hours FROM videogames
ORDER BY year DESC, playtime_hours ASC;Esta consulta ordena los juegos del más reciente al más antiguo. Si dos juegos son del mismo año, se desempatan mostrando primero el que tiene menos horas de juego.
Ejemplos
Usaremos la tabla videogames:
| id | title | developer | year | playtime_hours |
|---|---|---|---|---|
| 1 | The Legend of Zelda | Nintendo | 1986 | 20 |
| 2 | Super Mario Bros. | Nintendo | 1985 | 10 |
| 3 | Final Fantasy VII | Square Enix | 1997 | 40 |
| 4 | The Witcher 3 | CD Projekt Red | 2015 | 100 |
| 5 | Minecraft | Mojang Studios | 2011 | 9999 |
| 6 | Grand Theft Auto V | Rockstar Games | 2013 | 80 |
| 7 | Dark Souls | FromSoftware | 2011 | 60 |
| 8 | Portal 2 | Valve | 2011 | 8 |
| 9 | Red Dead Redemption 2 | Rockstar Games | 2018 | 70 |
| 10 | The Last of Us | Naughty Dog | 2013 | 15 |
| 11 | Halo: Combat Evolved | Bungie | 2001 | 10 |
| 12 | God of War | Santa Monica Studio | 2018 | 25 |
Ordenar por año
SELECT title, year FROM videogames
ORDER BY year ASC;Eliminar duplicados
Si queremos ver solo los desarrolladores únicos:
SELECT DISTINCT developer FROM videogames;