Volver a la lista de artículos Artículos
Lectura de 8 minutos

¿Qué significa ORDER BY 1 en SQL?

¿Alguna vez ha visto la sintaxis "ORDER BY 1" en las consultas SQL y se ha preguntado qué significa? En este artículo, exploraremos esta sintaxis, aclararemos su propósito y la haremos más fácil de entender.

Tanto si eres un usuario experimentado de SQL como si acabas de empezar a explorar este lenguaje, es probable que te hayas encontrado alguna vez con la cláus ula ORDER BY. En SQL, la cláusula ORDER BY se utiliza para ordenar las filas de una tabla en función de una o varias columnas. Permite ordenar los datos en orden ascendente (A-Z, 1-10) o descendente (Z-A, 10-1) según criterios específicos.

Después de la cláusula ORDER BY, normalmente se especifica la columna por la que se quieren ordenar los datos. Sin embargo, le sorprenderá saber que también puede utilizar sintaxis como ORDER BY 1 en una consulta SQL. La sintaxis de una consulta de este tipo es la siguiente:

SELECT column_name(s)
FROM table_name
ORDER BY 1;

Si has visto este tipo de código en consultas SQL y te ha dejado perplejo, ¡no te preocupes! Al final de este artículo, entenderás exactamente cómo funciona y cuándo utilizarlo. Y si alguna vez necesitas repasar la sintaxis SQL mientras lees el artículo, no dudes en consultar nuestra práctica hoja de trucosSQL para principiantes .

Para ser realmente bueno en SQL, debes practicarlo. Si quieres trabajar con muchos problemas prácticos, te recomendamos que pruebes nuestra ruta Ejercicio de SQL. Aprenderás resolviendo problemas reales, utilizando nuestro editor de código en línea y conjuntos de datos reales. Esta ruta consta de nueve cursos y más de 1.100 ejercicios prácticos con los que practicar.

¡Veamos ORDER BY 1 en Acción!

Imagine que tiene una tabla llamada movie con las siguientes columnas:

  • id - El ID de la película, que es también la clave primaria (PK) de la tabla.
  • title - El título de la película.
  • length - La duración de la película en minutos.
  • director - El nombre del director de la película.
  • year - Año de estreno de la película.
  • rating - La calificación de la película (de 1 a 10).

Aquí puedes ver un puñado de filas de la tabla:

idtitlelengthdirectoryearrating
1The Secret Quest110David Anderson20227
2Lost in Time95Emily Roberts20196
3Starship Odyssey150Michael Turner20218
4The Enchanted Forest85Sarah Johnson20227
5Epic Journey130Mark Lewis20207
6Space Explorers115Lisa Adams20227
7Time Travelers100Paul Miller20216
8Mystic Island140Jessica White20238
9The Great Discovery105Robert Green20217
10Underwater120Mary Johnson20216

¿Qué ocurre si ejecutamos la siguiente consulta?

SELECT 
	title,
	length,
	director
FROM movie
ORDER BY 1;

Al especificar ORDER BY 1, estamos indicando a la base de datos que ordene los resultados en función de la primera columna de la lista SELECT, que en este caso es title.

Esto significa que la consulta anterior es equivalente a ésta:

SELECT 
	title,
	length,
	director
FROM movie
ORDER BY title;

La primera consulta es un poco más corta, pero puede resultar más difícil de entender. En la segunda consulta, puede ver fácilmente qué columna se utiliza para la ordenación. Esto reduce la posibilidad de cometer un error.

Este es el resultado de nuestra consulta:

titlelengthdirector
Epic Journey130Mark Lewis
Lost in Time95Emily Roberts
Mystic Island140Jessica White
Space Explorers115Lisa Adams
Starship Odyssey150Michael Turner
The Enchanted Forest85Sarah Johnson
The Great Discovery105Robert Green
The Secret Quest110David Anderson
Time Travelers100Paul Miller
Underwater120Mary Johnson

Si cambiara el orden de las columnas seleccionadas, tendría que utilizar un número de columna diferente:

SELECT
	director,
	title,
	length
FROM movie
ORDER BY 2;

Como puede ver, utilizar esta sintaxis puede ser un poco complicado.

¿Sabía que puede utilizar una sintaxis similar en la cláusula GROUP BY? Consulte nuestro artículo sobre la sintaxis GROUP BY 1.

Orden ascendente y descendente

Por defecto, la cláusula ORDER BY ordena los resultados de menor a mayor, es decir, en orden ascendente. Sin embargo, a veces puede ser necesario ordenar los datos en orden descendente. También puede hacerlo utilizando la sintaxis ORDER BY 1. Todo lo que tiene que hacer es añadir la palabra clave ASC o DESC después de 1.

Por ejemplo, si quisieras recuperar la lista de las películas y ordenarla de la más larga a la más corta, podrías ejecutar una consulta como ésta:

SELECT
	title,
	length,
	director
FROM movie
ORDER BY 2 DESC;

La consulta anterior equivale a:

SELECT
	title,
	length,
	director
FROM movie
ORDER BY length DESC;

Y aquí está el resultado de nuestra consulta:

titlelengthdirector
Starship Odyssey150Michael Turner
Mystic Island140Jessica White
Epic Journey130Mark Lewis
Underwater120Mary Johnson
Space Explorers115Lisa Adams
The Secret Quest110David Anderson
The Great Discovery105Robert Green
Time Travelers100Paul Miller
Lost in Time95Emily Roberts
The Enchanted Forest85Sarah Johnson

¿Qué significa ORDER BY 1, 2, 3?

En nuestro ejemplo anterior, ordenamos los datos basándonos en una sola columna. Ahora, nos gustaría ordenar nuestras filas basándonos en tres columnas diferentes: year, rating, y title.

Para ello, podemos utilizar la siguiente consulta:

SELECT
	year,
	rating,
	title
FROM movie
ORDER BY 1, 2, 3;

Cuando se utiliza ORDER BY con varias columnas, la base de datos ordena primero las filas en función de la primera columna especificada. Si hay valores duplicados en la primera columna, la base de datos sigue ordenando esas filas utilizando la segunda columna especificada, y así sucesivamente. Al utilizar ORDER BY 1, 2, 3, estamos indicando a la base de datos que ordene los resultados basándose en la primera, segunda y tercera columnas de la lista SELECT.

Esto equivale a ejecutar la siguiente consulta:

SELECT
year,
rating,
title
FROM movie
ORDER BY year, rating, title;

Esto es lo que devuelve la consulta:

yearratingtitle
20196Lost in Time
20207Epic Journey
20216Time Travelers
20216Underwater
20217The Great Discovery
20218Starship Odyssey
20227Space Explorers
20227The Enchanted Forest
20227The Secret Quest
20238Mystic Island

La consulta anterior ordena los resultados en orden ascendente para todas las columnas. ¿Y si quisiéramos ordenar los resultados por año, de más reciente a más antiguo, por puntuación, de mayor a menor, y por título, alfabéticamente? Podemos hacerlo escribiendo ASC o DESC después de cada columna:

SELECT
	year,
	rating,
	title
FROM movie
ORDER BY 1 DESC, 2 DESC, 3 ASC;

El resultado de esta consulta es:

yearratingtitle
20238Mystic Island
20227Space Explorers
20227The Enchanted Forest
20227The Secret Quest
20218Starship Odyssey
20217The Great Discovery
20216Time Travelers
20216Underwater
20207Epic Journey
20196Lost in Time

Tenga en cuenta que los números de columna de la cláusula ORDER BY no tienen por qué ser consecutivos. También puede escribir una consulta como ésta:

SELECT
	title,
	year,
	rating
FROM movie
ORDER BY 2 DESC, 3 DESC, 1 ASC;

Ahora, estamos ordenando a la base de datos que agrupe los resultados basándose en la segunda, tercera y primera columna de la lista SELECT.

También puede mezclar números y nombres de columna en una sola cláusula ORDER BY:

SELECT
	title,
	year,
	rating
FROM movie
ORDER BY 2 DESC, 3 DESC, title ASC;

Esta vez, estamos agrupando los resultados basándonos en la segunda y tercera columna de la lista SELECT y en la columna title.

Las consultas anteriores devuelven lo siguiente:

titleyearrating
Mystic Island20238
Space Explorers20227
The Enchanted Forest20227
The Secret Quest20227
Starship Odyssey20218
The Great Discovery20217
Time Travelers20216
Underwater20216
Epic Journey20207
Lost in Time20196

Precaución: No utilice la sintaxis ORDER BY 1

El uso de las sintaxis ORDER BY 1 y ORDER BY 1, 2, 3 en SQL se considera generalmente una mala práctica porque dificulta la lectura y el mantenimiento de las consultas. Aunque puede ahorrarle algo de escritura, también puede causar problemas inesperados.

El principal problema de este método es que se basa en el orden de las columnas en la sentencia SELECT en lugar de especificar directamente los nombres de las columnas. Si el orden de las columnas cambia o se añaden nuevas columnas, los resultados de la consulta pueden cambiar de forma inesperada.

Por ejemplo, supongamos que utilizas la siguiente consulta para obtener la lista de películas ordenadas por año de la más reciente a la más antigua, luego por calificación de la más alta a la más baja y finalmente por título alfabéticamente:

SELECT
	title,
	year,
	rating
FROM movie
ORDER BY 2 DESC, 3 DESC, 1 ASC;

Ahora imaginemos que también queremos mostrar el nombre del director en nuestra lista. Podemos conseguirlo modificando un poco la consulta:

SELECT
	title,
	director,
	year,
	rating
FROM movie
ORDER BY 2 DESC, 3 DESC, 1 ASC;

Pero cuando ejecutamos esta consulta, ¡no nos da la respuesta correcta! Este es el resultado que obtenemos:

titledirectoryearrating
The Enchanted ForestSarah Johnson20227
The Great DiscoveryRobert Green20217
Time TravelersPaul Miller20216
Starship OdysseyMichael Turner20218
UnderwaterMary Johnson20216
Epic JourneyMark Lewis20207
Space ExplorersLisa Adams20227
Mystic IslandJessica White20238
Lost in TimeEmily Roberts20196
The Secret QuestDavid Anderson20227

Parece que las filas no están ordenadas por year, rating, y title como se pretendía. Esto demuestra los peligros potenciales de confiar en el orden de las columnas en lugar de especificar los nombres de las columnas directamente en la cláusula ORDER BY. ¿Puede detectar el error en nuestra consulta modificada?

El resultado es incorrecto porque hemos intentado ordenar las filas por las columnas director, year y title en lugar de por el año, la calificación y el título.

La consulta correcta sería la siguiente

SELECT
	title,
	director,
	year,
	rating
FROM movie
ORDER BY 3 DESC, 4 DESC, 1 ASC;

Pero podemos evitar este error simplemente utilizando la cláusula ORDER BY con los nombres completos de las columnas:

SELECT
	title,
	director,
	year,
	rating
FROM movie
ORDER BY year DESC, rating DESC, title ASC;

Ahora, incluso si decidimos cambiar o mover columnas en la sentencia SELECT, no tenemos que pensar en la parte ORDER BY.

Como puedes ver, es mejor mencionar explícitamente los nombres de las columnas por las que quieres ordenar en la cláusula ORDER BY. De este modo, la consulta será más fácil de leer y es menos probable que contenga errores.

El truco de ORDER BY 1 está bien cuando sólo estás consultando datos por tu cuenta y quieres acelerar la escritura. Pero si piensa reutilizar la consulta de algún modo, es mejor utilizar la sintaxis completa con los nombres de las columnas.

¿Tiene curiosidad por saber más sobre ORDER BY 1?

Eso es todo por hoy. Si quieres saber más sobre cómo utilizar la cláusula ORDER BY, echa un vistazo a nuestros artículos para aprender a utilizar ORDER BY en detalle y ver algunos ejemplos reales de uso de ORDER BY.

Y para más práctica, ¡recuerda visitar nuestra pista Ejercicio de SQL!