Ir al contenido
wannacode

ORDER BY, LIMIT y DISTINCT

En resumen: ORDER BY ordena el resultado, LIMIT y OFFSET toman una parte de él, y DISTINCT quita las filas repetidas.

Problema

El top 3 del escaparate

El dueño quiere los tres productos más caros en la página de inicio. Sabes cómo sacar el nombre y el precio. Pero ¿en qué orden salen las filas, y cómo tomas solo tres?

La idea

ORDER BY

ORDER BY ordena el resultado. Por defecto de menor a mayor:

SQLbase de datos: tienda

DESC lo invierte, de mayor a menor:

SQLbase de datos: tienda

Puedes ordenar por varias columnas: primero por la primera, y en caso de empate por la segunda. Los clientes por ciudad, y dentro de una ciudad por nombre:

SQLbase de datos: tienda

El texto se ordena alfabéticamente, las fechas como 2026-10-19 por tiempo.

Más precisamente, para curiosos

Sin ORDER BY, el orden de las filas no está prometido. A menudo sale por id, pero eso es una casualidad de cómo la base leyó la tabla. Tras un cambio en la tabla o con un índice nuevo, el orden puede cambiar. Cuando el orden te importa, escribe ORDER BY.

La idea

LIMIT: solo las primeras

LIMIT n devuelve las primeras n filas del resultado. Junto con ORDER BY da un top N:

SQLbase de datos: tienda

LIMIT se ejecuta al final, después de ordenar. Por eso «los tres más caros» es correcto. Sin ORDER BY serían tres productos cualquiera.

OFFSET salta filas. Así se hacen las páginas: la segunda página de pedidos, 10 por página:

SQLbase de datos: tienda

Pruébalo

Los clientes nuevos

Muestra el nombre y la fecha de registro de los cinco clientes más nuevos, el más nuevo primero.

SQLbase de datos: tienda

La idea

DISTINCT: sin repeticiones

¿De qué ciudades son los clientes? Con SELECT city, cada ciudad se repite tantas veces como clientes tiene. DISTINCT quita las repeticiones:

SQLbase de datos: tienda

Seis ciudades y NULL: Boris no tiene ciudad, y esa ausencia también es un resultado aparte.

Pruébalo

Los estados de los pedidos

Muestra todos los estados distintos de los pedidos, en orden alfabético.

SQLbase de datos: tienda

Ejercicio

Barato y con existencias

Muestra el nombre, el precio y las existencias de los cinco productos más baratos que hay en existencia, el más barato primero.

SQLbase de datos: tienda
Más precisamente, para curiosos

¿Adónde van los NULL al ordenar? En SQLite y MySQL, ORDER BY city los pone primero; en PostgreSQL y Oracle van al final. Si te importa, dilo: ORDER BY city NULLS LAST. SQLite lo entiende desde la versión 3.30.

SQLbase de datos: tienda

Test

Ponte a prueba

1. ¿En qué orden salen las filas de un SELECT sin ORDER BY?
2. ¿Qué hace LIMIT 10 OFFSET 20?
3. SELECT DISTINCT city FROM customers también devuelve NULL. ¿Por qué?
4. ¿Cómo se escribe «el más caro primero»?

Creado por Ivo Gergov como parte de la campaña de Evo Tech por una educación accesible en programación ·