Aprende SQL

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.

Sin ordenar
Zelda20h
Mario10h
Witcher100h
Portal8h
GTA V80h
ORDER BY
DESC + LIMIT 3
Witcher100h
GTA V80h
Zelda20h
LIMIT 3
Mario10h
Portal8h

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:

Nombre de la Tabla: videogames
idtitledeveloperyearplaytime_hours
1The Legend of ZeldaNintendo198620
2Super Mario Bros.Nintendo198510
3Final Fantasy VIISquare Enix199740
4The Witcher 3CD Projekt Red2015100
5MinecraftMojang Studios20119999
6Grand Theft Auto VRockstar Games201380
7Dark SoulsFromSoftware201160
8Portal 2Valve20118
9Red Dead Redemption 2Rockstar Games201870
10The Last of UsNaughty Dog201315
11Halo: Combat EvolvedBungie200110
12God of WarSanta Monica Studio201825

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;

Ejercicios