Ordenar datos por varias columnas
A veces, necesitamos ordenar los datos con más de una columna para obtener resultados más organizados. En MySQL, el comando ORDER BY nos permite realizar una doble ordenación, por lo que podemos especificar el orden de prioridad de las columnas que queremos ordenar.
La clasificación doble es especialmente útil cuando los datos tienen varios parámetros que deben ordenarse para obtener resultados más claros. Por ejemplo, al ordenar los datos de los clientes, podemos comenzar primero con el apellido y luego seguir con el nombre para evitar errores de orden de los clientes con el mismo apellido. Otro ejemplo es cuando se ordenan los productos por precio y nombre del producto, lo que nos ayuda a ver los productos con el mismo precio en orden alfabético de los nombres de los productos.
Para ordenar los datos por varias columnas, solo necesitamos agregar el nombre de columna deseado en el comando ORDER BY, separado por comas. A continuación se muestra un ejemplo de consulta para ordenar productos por precio y nombre de producto:
SELECT prod_id, prod_price, prod_name
FROM products
ORDER BY prod_price, prod_name;
En esta consulta, los datos se ordenarán por la columna prod_price (precio del producto) como máxima prioridad. Si hay varios productos con el mismo precio, la clasificación se procederá a la segunda columna, que es prod_name (nombre del producto), que se ordenará alfabéticamente.
El orden de clasificación de las cláusulas ORDER BY es crucial para determinar cómo se organizarán los datos. La primera columna mencionada en ORDER BY es la máxima prioridad, por lo que todos los datos se ordenarán primero en función de esta columna. Si hay el mismo valor en la primera columna, las columnas segunda, tercera, etc. se utilizarán como criterios adicionales para ordenar aún más los datos.
Por ejemplo, si tenemos datos específicos, este tipo de orden nos ayudará a entender cómo se organizan los datos.
+---------+------------+----------------+
| prod_id | prod_price | prod_name |
+---------+------------+----------------+
| P001 | 10.00 | Apel |
| P002 | 10.00 | Jeruk |
| P003 | 15.00 | Mangga |
| P004 | 10.00 | Pisang |
Mediante la siguiente consulta:
SELECT prod_id, prod_price, prod_name
FROM products
ORDER BY prod_price, prod_name;
Los datos se organizarán primero por prod_price (precio), seguido de prod_name (nombre del producto). El resultado es que los productos con el mismo precio se ordenarán alfabéticamente por nombre de producto.
Clasificación por posición de columna
MySQL nos permite ordenar los datos no solo por nombre de columna, sino también utilizando la posición de las columnas en SELECT declaraciones. Esto significa que podemos usar el número de secuencia de columna para hacer ORDER BY sin mencionar el nombre de la columna directamente.
Ordenar por posición de columna significa que usamos el número de secuencia de columna en la declaración SELECT como referencia para ordenar los datos. Por ejemplo, la primera columna tiene la posición 1, la segunda columna tiene la posición 2, y así sucesivamente. Este método hace que la escritura de consultas sea más corta, especialmente cuando los nombres de las columnas son demasiado largos o complicados.
El uso de la ordenación por posición de columna es útil cuando la columna tiene un nombre que es difícil de reescribir, lo que acelera el proceso de escritura de consultas. Además, este método es efectivo si estamos seguros de que el orden de las columnas en la instrucción SELECT no cambiará.
Sin embargo, hay que tener en cuenta algunos inconvenientes. Si se cambia el orden de las columnas en el futuro, la clasificación por posición puede producir resultados no deseados. Además, el uso de números de posición puede hacer que la consulta sea menos clara, especialmente para otros que leen y no conocen el orden de las columnas utilizadas.
Este es un ejemplo de una consulta que ordena los datos en función de las posiciones de las columnas:
SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY 2, 3;
En esta consulta, el número 2 hace referencia a la segunda columna, que es prod_price, y el número 3 hace referencia a la tercera columna, que es prod_name. De esta forma, los datos se ordenarán por prod_price primero, y si hay productos con el mismo precio, se ordenará por prod_name.