Aprende SQL

Ordenando y eliminando duplicados: ORDER BY y DISTINCT

Lección 04 · Fundamentos de SELECT

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.

Diagrama: tabla original (title/hours: Zelda 20, Mario 10, Witcher 100, Portal 8, GTA V 80) → ORDER BY hours DESC LIMIT 3 → Resultado (#1 Witcher 100, #2 GTA V 80, #3 Zelda 20 · 3 filas).

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

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;

Tablas de esta lección

videogames5 cols

Estructura

🔑idINTEGERtitleTEXTdeveloperTEXTyearINTEGERplaytime_hoursINTEGER

Datos de ejemplo (5 filas)

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

Ejercicios

Selecciona el título y el año de los videojuegos ordenados por año ascendente.

sql

Selecciona el título y las horas de juego de los 3 videojuegos con más horas.

sql

Selecciona los desarrolladores únicos de la tabla videogames.

sql

Selecciona título, año y horas de juego ordenando por año descendente y, en caso de empate, por horas ascendente.

sql