2. LENGUAJE DE MANIPULACIÓN DE DATOS (DML, DATA MANAGEMENT LANGUAGE).
2.8. ORDENAR RESULTADOS EN SQL CON ORDER BY
Hasta este punto hemos aprendido a filtrar datos en SQL utilizando distintas cláusulas (WHERE, IN, BETWEEN, etc.). Ahora, daremos un paso más y aprenderemos a ordenar los resultados de una consulta mediante la cláusula ORDER BY.
¿Cómo se ordenan las filas en una base de datos?
En los sistemas de gestión de bases de datos relacionales como PostgreSQL, MySQL o SQL Server, las filas no se almacenan en un orden específico ni se garantiza un orden en los resultados al realizar una consulta.
De hecho, si ejecutas la misma instrucción SELECT * dos veces sobre el mismo conjunto de datos, es posible que obtengas los resultados en un orden diferente.
Esto es una diferencia importante respecto a programas como Excel o Google Sheets, donde las filas tienen un orden visual fijo.
Por esta razón, cuando necesites garantizar un orden específico en los resultados, debes utilizar explícitamente la cláusula ORDER BY.
¿Qué es ORDER BY y cómo funciona?
La cláusula ORDER BY en SQL permite reorganizar los resultados de una consulta en función de los valores de una o más columnas.
Su sintaxis básica es:
SELECT columna1, columna2, ...
FROM nombre_tabla
WHERE condiciones
ORDER BY columna [ASC | DESC];
- ASC (ascendente): Es el orden por defecto. Coloca los valores de menor a mayor o alfabéticamente de A a Z.
- DESC (descendente): Ordena los valores de mayor a menor o alfabéticamente de Z a A.
Ejemplo práctico
Imagina que trabajas con los datos de ventas de medicamentos en CVS Pharmacy. Si ejecutas la siguiente consulta:
SELECT * FROM pharmacy_sales;
Obtendrás resultados no ordenados como los siguientes:
| prod_id | prod_droga | prod_unidadesvendidas |
|---|---|---|
| 156 | Aciclovir | 89,514 |
| 41 | Claritromicina | 189,925 |
| 63 | Reductor de ácido Pepcid AC | 93,513 |
| 148 | Motrin | 104,637 |
| 9 | Zyprexa | 37,410 |
| 54 | Diclofenac Sodium | 68,593 |
Ordenando los resultados
Para organizar estos medicamentos alfabéticamente por el nombre, podemos usar:
SELECT prod_id, prod_droga, prod_unidadesvendidas
FROM pharmacysales
ORDER BY prod_droga;
El resultado ahora será:
| prod_id | prod_droga | prod_unidadesvendidas |
|---|---|---|
| 156 | Aciclovir | 89,514 |
| 41 | Claritromicina | 189,925 |
| 54 | Diclofenac Sodium | 68,593 |
| 148 | Motrin | 104,637 |
| 63 | Reductor de ácido Pepcid AC | 93,513 |
| 9 | Zyprexa | 37,410 |
De esta forma, garantizamos que los datos se presentan en orden alfabético según la columna prod_droga.
Ordenamiento avanzado con ORDER BY en SQL
En la lección anterior vimos cómo utilizar ORDER BY para ordenar los resultados de una consulta en orden ascendente (el valor por defecto). Ahora aprenderemos a cambiar la dirección del ordenamiento y a ordenar por múltiples columnas.
Orden ascendente y descendente
Por defecto, la cláusula ORDER BY en SQL ordena las filas de manera ascendente (ASC):
- Para texto, esto significa un orden alfabético de A a Z.
- Para números, los valores se ordenan de menor a mayor.
Si deseamos revertir este comportamiento, utilizamos la palabra clave DESC (descendente). Así los datos se ordenan:
- De Z a A para texto.
- De mayor a menor para números.
Sintaxis:
SELECT columna1, columna2
FROM nombre_tabla
WHERE condiciones
ORDER BY columna DESC;
Ejemplo práctico: ORDER BY DESC
Imagina que trabajas como analista de datos en la cadena de farmacias CVS Pharmacy y necesitas ordenar la tabla de ventas para que los medicamentos más vendidos aparezcan primero.
SELECT product_id, drug, units_sold
FROM pharmacy_sales
ORDER BY units_sold DESC;
Resultado:
| prod_id | prod_droga | prod_unidadesvendidas |
|---|---|---|
| 41 | Claritromicina | 189,925 |
| 148 | Motrin | 104,637 |
| 63 | Reductor de ácido Pepcid AC | 93,513 |
| 156 | Aciclovir | 89,514 |
| 54 | Diclofenac Sodium | 68,593 |
| 9 | Zyprexa | 37,410 |
Como puedes ver, los registros ahora están ordenados en orden descendente según las unidades vendidas.
Ordenamiento por múltiples columnas
SQL también permite ordenar los resultados por más de una columna. Esto es útil cuando deseas aplicar un orden jerárquico: primero por una columna, y en caso de empate, por otra.
Sintaxis:
SELECT columna1, columna2
FROM nombre_tabla
WHERE condiciones ORDER BY columna1 ASC, columna2 DESC;
- La primera columna establece el orden principal.
- La segunda (y posteriores) se utilizan para ordenar dentro de los grupos definidos por la primera.
Ejemplo práctico: Orden por dos columnas
Supongamos que trabajas como científico de datos en UnitedHealth y analizas los registros de llamadas al centro de soporte. Necesitas:
- Agrupar las llamadas por titular de póliza (policy_holder_id).
- Ordenar las llamadas más recientes primero dentro de cada titular.
SELECT policy_holder_id, call_category, call_received
FROM callers
ORDER BY policy_holder_id, call_received DESC;
Resultado esperado:
- Los registros estarán agrupados por titular.
- Dentro de cada grupo, las llamadas estarán en orden cronológico inverso (de la más reciente a la más antigua).
Conclusión
El uso de ORDER BY combinado con ASC, DESC y múltiples columnas te permite controlar el orden de los resultados, facilitando análisis más claros y personalizados.
Ordenar y limitar resultados en SQL: Uso de posiciones, LIMIT y OFFSET
Hasta ahora hemos aprendido a usar ORDER BY para ordenar los resultados de una consulta según una o varias columnas. Ahora veremos dos aspectos complementarios: ordenar por la posición de las columnas seleccionadas y controlar la cantidad de resultados devueltos mediante LIMIT y OFFSET.
Ordenar por posiciones en lugar de nombres de columnas
En SQL, es posible sustituir el nombre de una columna en ORDER BY por el número de posición que ocupa en la cláusula SELECT.
Esto puede simplificar la consulta, especialmente cuando trabajamos con nombres de columnas largos o cálculos derivados.
Ejemplo:
SELECT policy_holder_id, call_category, call_received
FROM callers
ORDER BY 1, 3 DESC;
- 1 corresponde a la primera columna especificada en el SELECT (policy_holder_id).
- 3 corresponde a la tercera columna (call_received).
El resultado será el mismo que si hubiéramos escrito ORDER BY policy_holder_id, call_received DESC;.
Limitar resultados con LIMIT
En ocasiones no necesitamos ver todos los resultados de una consulta, sino solo un número específico de filas. Para ello usamos la cláusula LIMIT, que restringe el número de registros devueltos.
Ejemplo:
SELECT * FROM callers
ORDER BY call_received DESC
LIMIT 5;
Esta consulta devolverá las 5 llamadas más recientes (por el orden descendente en call_received).
Este enfoque es muy útil para casos como:
- Los 3 productos más vendidos.
- Los 5 clientes con mayores compras.
- Las 10 últimas transacciones registradas.
Controlar el desplazamiento con OFFSET
Podemos combinar LIMIT con OFFSET para saltar un número determinado de filas antes de comenzar a devolver los resultados.
Ejemplo:
SELECT * FROM callers
ORDER BY call_received DESC
OFFSET 10
LIMIT 5;
En este caso, se omiten las primeras 10 llamadas y se muestran las siguientes 5. Esto permite navegar por los resultados por “páginas” o lotes.
Conclusión y lo que sigue
Con ORDER BY, LIMIT y OFFSET puedes controlar el orden y la cantidad de registros que deseas visualizar, lo que resulta fundamental en análisis de datos y en aplicaciones donde solo necesitas mostrar los primeros resultados relevantes.
Estos conceptos cierran el bloque de comandos básicos en SQL. En el siguiente nivel —Tutorial Intermedio— profundizaremos en comandos más avanzados y estrategias para resolver problemas prácticos, incluyendo ejercicios típicos de entrevistas técnicas.
-------------------------------------------------------------------------------------------------------------