Responder preguntas como cuáles son los diez productos más vendidos o las cinco sucursales con mayor facturación requiere dominar dos comandos fundamentales de SQL: ORDER BY y LIMIT. Estas instrucciones son la base de cualquier reporte y permiten transformar datos crudos en información útil para el negocio.
¿Cómo funciona ORDER BY en SQL?
Cuando ejecutamos una consulta, los resultados no tienen un orden garantizado. ORDER BY nos permite definir cómo se organizan las filas según una o más columnas [01:20].
Existen dos direcciones de ordenamiento:
Ascendente (ASC): ordena de menor a mayor. Es el comportamiento por defecto, así que escribir ORDER BY precio es equivalente a ORDER BY precio ASC.
Descendente (DESC): ordena de mayor a menor. Se utiliza cuando necesitamos ver primero los valores más altos, como el producto más caro.
Por ejemplo, al consultar SELECT nombre, precio FROM productos ORDER BY precio ASC, obtenemos los productos listados desde el más barato hasta el más costoso. Si cambiamos a ORDER BY precio DESC, el resultado se invierte mostrando primero el más caro [02:10].
¿Qué significa ordenar por múltiples columnas?
Una técnica muy utilizada es aplicar ORDER BY con varias columnas, donde SQL usa el primer criterio como principal y el segundo como desempate [03:05]. Por ejemplo:
sql SELECT nombre, categoria_id, precio FROM productos ORDER BY categoria_id ASC, precio DESC;
Esta consulta agrupa primero por categoria_id de forma ascendente (1, 2, 3...) y dentro de cada categoría ordena los productos por precio de mayor a menor. Es una forma poderosa de estructurar reportes donde necesitamos jerarquía en los criterios de ordenamiento.
¿Cómo obtener un top N de resultados con LIMIT?
Las preguntas de negocio tipo "los cinco más caros" o "los tres pedidos más recientes" combinan ORDER BY con LIMIT para recortar la cantidad de filas devueltas [04:30].
sql SELECT nombre, precio FROM productos ORDER BY precio DESC LIMIT 5;
Esta consulta entrega el top five de productos por precio. Si necesitamos un top ten, solo cambiamos LIMIT 5 por LIMIT 10 [05:15].
¿Cómo encontrar los registros más recientes?
Para obtener los pedidos más recientes, ordenamos por fecha de forma descendente, lo que coloca la fecha más nueva primero y retrocede hacia el pasado [05:50]:
sql SELECT pedido_id, cliente_id, fecha FROM pedidos ORDER BY fecha DESC LIMIT 3;
El resultado muestra los últimos tres pedidos realizados, con sus respectivos clientes y fechas.
¿Para qué sirve OFFSET en la paginación de resultados?
OFFSET permite saltar un número determinado de filas antes de comenzar a devolver resultados [06:40]. Es la herramienta clave para implementar paginación, útil cuando los datos deben mostrarse en segmentos.
LIMIT 10 OFFSET 0 devuelve las filas 1 a 10 (primera página).
LIMIT 10 OFFSET 10 devuelve las filas 11 a 20 (segunda página).
LIMIT 10 OFFSET 20 devuelve las filas 21 a 30 (tercera página).
sql SELECT nombre, precio FROM productos ORDER BY nombre LIMIT 10 OFFSET 10;
Este patrón es especialmente útil cuando existen límites de exportación o cuando los datos se envían por correo, se cargan en un CSV o se muestran en informes con formato fijo [07:45].
¿Cómo trata SQL los valores nulos al ordenar?
Cuando una columna contiene datos nulos (vacíos, sin valor asignado), el comportamiento varía según la dirección del ordenamiento [08:20]:
Con ORDER BY precio ASC, los nulos aparecen al final.
Con ORDER BY precio DESC, los nulos aparecen al inicio.
SQL asume que los valores nulos son inferiores a cero, por lo que en orden descendente los coloca primero. Conocer este comportamiento evita sorpresas en los reportes.
Ahora que dominas ORDER BY, LIMIT y OFFSET, pon a prueba tus habilidades: busca los cinco productos más caros del catálogo, los diez clientes registrados más recientemente y los últimos tres pedidos por fecha descendente. Comparte tus consultas y resultados en los comentarios.
En SQL, una consulta SELECT se puede entender de forma similar a un GET en una API REST, donde se obtienen datos aplicando diferentes filtros y configuraciones. En este contexto, WHERE funciona como el filtro principal porque define qué registros deben devolverse según una condición. Luego ORDER BY no filtra datos sino que organiza los resultados según una columna, como cuando ordenamos una lista por precio o fecha. Por su parte, LIMIT permite restringir la cantidad de registros devueltos, algo útil cuando solo necesitamos un top de resultados. Finalmente, OFFSET complementa a LIMIT permitiendo saltar cierta cantidad de filas, lo que resulta esencial para implementar paginación. En conjunto, estos comandos no solo permiten obtener datos, sino también controlar cómo se presentan y cuántos se muestran, algo muy similar a los parámetros que se usan en un endpoint GET moderno.
Los recursos de la clase no contienen el mismo código base con productos y ventas para hacer las pruebas
Les comparto el desafío de la clase, adicionalmente agregué un filtro para los clientes de modo que muestre solamente los que estan activos en la consulta:
me gustó el ejemplo del paginado con offset
Orden Simple y Direccional
Puedes ordenar de forma ascendente (por defecto) o descendente.
SELECT nombre, apellido FROM empleado ORDERBY apellido ASC;
ASC: De la A a la Z o de menor a mayor.
DESC: De la Z a la A o de mayor a menor.
Orden Compuesto
Ideal cuando tienes muchos registros con el mismo valor (ej. muchos empleados con el mismo apellido) y quieres un segundo criterio.
Tip visual**:** La base de datos primero agrupará por sucursal_id y, dentro de cada grupo de la misma sucursal, ordenará los apellidos de forma descendente.
Al final cuando habla de cómo sql trabaja con los precios nulos, lo que está escrito en las sentencias (los comentarios) están correctos, pero lo que dice el profe es muy confuso