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

Diferencia entre GROUP BY y ORDER BY en palabras sencillas

Para alguien que está aprendiendo SQL, uno de los lugares más comunes en los que se atasca es al aprender el comando GROUP BY. GROUP BY y ORDER BY son dos palabras clave importantes en SQL que utilizamos para organizar los datos. La diferencia entre GROUP BY y ORDER BY es que ORDER BY es más sencilla que GROUP BY y suele introducirse al principio de un curso de SQL.

A veces, la gente se confunde bastante con estos dos conceptos (SQL ORDER BY vs. GROUP BY), y el motivo de esta confusión es la falta de comprensión de ambos conceptos. Aunque ambos se utilizan para ordenar los datos en función de sus valores, sus casos de uso difieren enormemente entre sí. Si aprendemos bien estos dos conceptos, la confusión desaparecerá de forma natural.

En este artículo, he utilizado una interesante base de datos publicada aquí. El conjunto de datos contiene más de 2000 cervezas artesanales y 500 cervecerías utilizadas en los Estados Unidos. Los datos se incluyen en archivos CSV, que se pueden importar fácilmente a cualquiera de las bases de datos mediante una herramienta GUI. Uno de mis colegas ha mostrado cómo hacerlo en un ejemplo de los datos de la encuesta de LearnSQL.

Hay dos tablas en este conjunto de datos: beers y breweries. Veamos el conjunto de datos de ejemplo de la tabla beers para tener una mejor idea de ella.

tabla de cervezas

ORDENAR POR

Nuestro primer tema es ORDER BY. Antes de intentar comprender la diferencia entre GROUP BY y ORDER BY, veamos cómo funciona el comando SELECT.

Vamos a SELECT el nombre, la ciudad y el estado de cada registro de la tabla breweries tabla.

SELECT name, 
 city, 
 state 
FROM breweries

Cuando ejecute el comando anterior, obtendrá algo como lo siguiente:

SELECCIONE el nombre, la ciudad y el estado de la tabla de cervecerías

Puede ver que estos resultados no están ordenados según sus nombres. El orden por defecto para una sentencia SELECT es no determinista, lo que significa que el orden de los resultados puede variar en cualquier momento que ejecute su código.

Sin embargo, un orden no determinista no suele ser lo que queremos. Por ejemplo, suponga que desea ordenar los resultados por orden ascendente o descendente de su columna state; en ese caso, necesitaría el comando ORDER BY. Todo lo que tiene que hacer es utilizar la cláusula ORDER BY de esta manera:

SELECT name, 
city, 
state 
FROM 	breweries 
ORDER BY state ASC
ORDENAR POR

Del mismo modo, puede obtener los resultados en orden descendente del estado también.

SELECT name, 
city, 
state 
FROM breweries
ORDER BY state DESC
orden descendente

Puede ver los registros que están organizados por orden descendente del estado. El orden por defecto del comando ORDER BY es ascendente. Por lo tanto, si no ha utilizado ASC o DESC, los resultados vendrán en orden ascendente.

Puede utilizar ORDER BY en dos o más columnas. Compruebe la siguiente consulta:

SELECT name, 
 city, 
 state 
FROM breweries
ORDER BY state,
         city DESC

Esta consulta ordena primero los resultados en el orden ascendente del estado, seguido por el orden descendente de la ciudad.

ORDENAR POR

Ahora bien, lo interesante es que alguien que no sepa utilizar mucho GROUP BY podría utilizar ORDER BY para analizar los datos. Por ejemplo, supongamos que quiere averiguar cuántas cervecerías hay en un determinado state. Lo que podrías hacer es obtener los resultados ordenados por sus estados. Esto le dará un buen resultado agrupado a partir del cual podrá contar manualmente el número de cervecerías de un determinado state.

Por lo tanto, alguien que no tenga un gran conocimiento de GROUP BY podría pensar que ORDER BY es una excelente manera de agrupar los mismos datos. Esa idea no es errónea. Si quieres mostrar los datos de forma agrupada, ORDER BY es una buena opción.

GROUP BY no es una forma de mostrar los datos en grupos, sino que es más bien una forma de analizar los datos en grupos. Para comprender mejor el SQL ORDER BY vs. GROUP BY, veamos GROUP BY con más detalle.

GROUP BY

En la mayoría de los textos, GROUP BY se define como una forma de agregar registros por las columnas especificadas que permiten realizar funciones de agregación en columnas no agrupadas (como SUM, COUNT, AVG, etc). En otras palabras, el propósito de la cláusula GROUP BY es resumir combinaciones únicas de valores de columnas.

Unos cuantos ejemplos lo aclararán mejor:

Agrupemos beers la tabla en función de la columna style.

SELECT style 
FROM beers 
GROUP BY style

La consulta SQL anterior generará el siguiente resultado

ORDENAR POR

Veamos qué ha ocurrido aquí. Esta consulta ha devuelto un resultado de cada valor de style. Esto significa que SQL primero hace grupos de los mismos valores de style y devuelve una fila que representa el grupo.

¿Y cuál es el uso exacto de GROUP BY? Por supuesto, se puede utilizar GROUP BY para encontrar valores distintos. Pero SQL tiene una palabra clave DISTINCT específicamente para eso. La verdadera importancia de GROUP BY se puede ver cuando se utiliza con funciones de agregación como SUM(), COUNT(). Para entenderlo mejor, ejecute la siguiente consulta SQL:

SELECT style, 
 COUNT(Name) 
FROM beers 
GROUP BY style

Generará el siguiente resultado:

ORDENAR POR

Aquí, SQL primero agrupa los resultados en base a la columna style. Luego, comprueba cuántos nombres hay en cada grupo y devuelve los valores de style y el recuento de nombres para cada estilo.

Si te fijas bien, puedes observar que los resultados ya están ordenados de forma ascendente. Esta situación hace que, en ocasiones, la gente crea que GROUP BY ordena los resultados. En realidad, no hay garantía de que GROUP BY muestre los resultados en orden ascendente. Si necesitas resultados en un orden específico, tienes que hacerlo tú mismo, como se indica a continuación:

SELECT style, 
COUNT(Name) 
FROM beers 
GROUP BY style 
ORDER BY style

Por lo tanto, GROUP BY funciona bien junto con ORDER BY.

Así pues, ahora ya sabes cómo utilizar GROUP BY para contar un conjunto de valores que pertenecen a un determinado grupo. Te daré dos ejemplos más del mundo real para entender el uso de GROUP BY.

  1. Piense en una tabla de empleados en la que se almacena información sobre los empleados, como su nombre, su función y su salario. Cada empleado pertenece a un departamento diferente, como el de finanzas, el de informática o el de transporte. Ahora, suponga que quiere obtener la suma de los salarios que ha pagado a los empleados en función de su departamento. Tendrá que ejecutar un comando SQL como el que se muestra a continuación:

    SELECT department,
     SUM(salary) 
    FROM employee 
    GROUP BY department
    
  2. Suponga que tiene un sitio web de comercio electrónico que vende varios tipos de productos. En su base de datos, tiene una tabla para almacenar información sobre las existencias. Si quiere encontrar el recuento de cada tipo de producto, puede utilizar la función agregada GROUP BY with COUNT:

    SELECT product_type, 
     COUNT(product_id) 
    FROM stock
    GROUP BY product_type
    

Llevemos esta lección un poco más lejos para aumentar tu conocimiento de GROUP BY. También puedes agrupar resultados usando dos columnas. Por ejemplo, agrupemos la tabla beers tabla basada en style y brewery_id.

SELECT style,
 brewery_id,
 COUNT(Name) 
FROM beers 
GROUP BY style,
   brewery_id

Esta consulta SQL dividirá los grupos de style utilizando brewery_id. Al ejecutarla, obtendrá el siguiente resultado:

ORDENAR POR

Conclusión

En este artículo, he explicado la diferencia entre ORDER BY y GROUP BY. ORDER BY ordena los datos basándose en los datos de una columna. Por supuesto, como resultado de la ordenación, los datos de los mismos valores se reunirán como un grupo, lo que le facilitará el análisis manual posterior. Pero GROUP BY es la forma SQL de analizar datos similares.

No hay un uso real de GROUP BY sin funciones de agregación. A veces, GROUP BY puede devolver resultados ordenados, pero no debe confiar en ello. El orden en que se devuelven los resultados no es determinista y depende de cómo el motor de la base de datos ejecuta la consulta.

Después de leer este artículo, deberías ser capaz de utilizar GROUP BY y ORDER BY con más confianza. Si desea perfeccionar sus conocimientos sobre SQL ORDER BY frente a GROUP BY, consulte este conjunto de prácticas, que contiene una sección especial dedicada a este tema.