# SQL GROUP BY: cómo agrupar valores idénticos

Si deseas agrupar filas con valores idénticos, SQL GROUP BY es la instrucción adecuada. Suele utilizarse en combinación con funciones de agregación.

## ¿Qué es SQL GROUP BY?

En el [Structured Query Language](https://www.ionos.mx/digitalguide/servidores/configuracion/sql-introduccion-con-ejemplos/), SQL GROUP BY es una instrucción que se utiliza para agrupar filas con valores idénticos. Se utiliza con el [comando SQL](https://www.ionos.mx/digitalguide/servidores/configuracion/comandos-sql/) `SELECT` y sigue a la instrucción WHERE. SQL GROUP BY se utiliza a menudo en combinación con funciones como [SQL AVG()](https://www.ionos.mx/digitalguide/servidores/configuracion/sql-avg/), [SQL COUNT()](https://www.ionos.mx/digitalguide/servidores/configuracion/sql-count/), `MAX()`, `MIN()` o `SUM()`. Esto te permite realizar **cálculos y mostrar los resultados dentro de tu tabla**. La instrucción es muy útil si se quiere determinar una instrucción o relacionar valores entre sí.

## Sintaxis y funcionalidad

La sintaxis básica de SQL GROUP BY es la siguiente:

```sql
SELECT columna1, columna2, columna3, …  
FROM nombre_de_tabla  
GROUP BY columna1, columna2, columna3, …;
```

Sin embargo, la versión con una cláusula `WHERE`, que permite integrar determinadas condiciones, es mucho más común:

```sql
SELECT columna1, columna2, columna3, …  
FROM nombre_de_tabla  
WHERE condición  
GROUP BY columna1, columna2, columna3, …  
ORDER BY columna1, columna2, columna3, …;
```

## Ejemplo de uso con COUNT()

Para ilustrar cómo puedes utilizar SQL GROUP BY, crearemos una tabla sencilla llamada “Lista de clientes”. Ésta contiene columnas para el número de cliente, el nombre, la ubicación y los artículos comprados:

<table>
  <thead>
    <tr>
      <th>Número de cliente</th>
      <th>Nombre</th>
      <th>Ubicación</th>
      <th>Artículo</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1427</td>
      <td>Santos</td>
      <td>Nueva York</td>
      <td>13</td>
    </tr>
    <tr>
      <td>1377</td>
      <td>Johnson</td>
      <td>Los Ángeles</td>
      <td>9</td>
    </tr>
    <tr>
      <td>1212</td>
      <td>Brown</td>
      <td>Los Ángeles</td>
      <td>15</td>
    </tr>
    <tr>
      <td>1431</td>
      <td>Davis</td>
      <td>Chicago</td>
      <td>22</td>
    </tr>
    <tr>
      <td>1118</td>
      <td>Martínez</td>
      <td>Nueva York</td>
      <td>10</td>
    </tr>
  </tbody>
</table>

Ahora podemos utilizar SQL GROUP BY en combinación con la función `COUNT()`, por ejemplo, para listar cuántos clientes proceden de qué ciudades. He aquí el código correspondiente:

```sql
SELECT Ubicación, COUNT(*) AS Cantidad  
FROM Lista_de_clientes  
GROUP BY Ubicación;
```

Como resultado, obtenemos esta nueva tabla:

<table>
  <thead>
    <tr>
      <th>Ubicación</th>
      <th>Cantidad</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Chicago</td>
      <td>1</td>
    </tr>
    <tr>
      <td>Nueva York</td>
      <td>2</td>
    </tr>
    <tr>
      <td>Los Ángeles</td>
      <td>2</td>
    </tr>
  </tbody>
</table>

Hemos utilizado [SQL Aliases](https://www.ionos.mx/digitalguide/servidores/configuracion/alias-sql/) para mostrar los resultados como un “número”.

## La sentencia junto con SUM()

En el siguiente ejemplo, utilizamos SQL GROUP BY en combinación con `SUM()` para determinar y mostrar cuántos artículos se pidieron a Los Ángeles:

```sql
SELECT Ubicación, SUM(Artículo) AS Total  
FROM Lista_de_clientes  
WHERE Ubicación = 'Los Ángeles'  
GROUP BY Ubicación;
```

Como resultado obtenemos:

<table>
  <thead>
    <tr>
      <th>Ubicación</th>
      <th>Total</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Los Ángeles</td>
      <td>24</td>
    </tr>
  </tbody>
</table>

## Uso con ORDER BY

También es posible una combinación con `ORDER BY`. Para nuestra tabla, ordenamos por el mayor número de artículos pedidos por cliente y por ciudad. Empezamos por la localidad en la que un cliente ha comprado más artículos. El código correspondiente, para el que combinamos SQL GROUP BY con la función `MAX()` y `ORDER BY`, es este:

```sql
SELECT Ubicación, MAX(Artículo) AS MayorCantidad  
FROM Lista_de_clientes  
GROUP BY Ubicación ORDER BY MayorCantidad DESC;
```

Y el resultado sería:

<table>
  <thead>
    <tr>
      <th>Ubicación</th>
      <th>Mayor cantidad</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Chicago</td>
      <td>22</td>
    </tr>
    <tr>
      <td>Los Ángeles</td>
      <td>15</td>
    </tr>
    <tr>
      <td>Nueva York</td>
      <td>13</td>
    </tr>
  </tbody>
</table>

## En combinación con HAVING

También puedes combinar SQL GROUP BY con [SQL HAVING](https://www.ionos.mx/digitalguide/servidores/configuracion/sql-having/). En el siguiente ejemplo, eliminamos de la lista aquellos clientes cuyo número de cliente es inferior a 1300. Ordenamos las personas restantes según el número de artículos que han pedido en orden ascendente:

```sql
SELECT Ubicación, Número de cliente, MIN(Artículo) AS MenorCantidad  
FROM Lista_de_clientes  
GROUP BY Ubicación, Número_de_cliente HAVING Número_de_cliente > 1300;
```

Obtenemos esta tabla como nuevo resultado:

<table>
  <thead>
    <tr>
      <th>Ubicación</th>
      <th>Número de cliente</th>
      <th>Menor cantidad</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Los Ángeles</td>
      <td>1377</td>
      <td>9</td>
    </tr>
    <tr>
      <td>Nueva York</td>
      <td>1427</td>
      <td>13</td>
    </tr>
    <tr>
      <td>Chicago</td>
      <td>1431</td>
      <td>22</td>
    </tr>
  </tbody>
</table>

## Alternativas a SQL GROUP BY

Una alternativa popular a SQL GROUP BY es la sentencia `PARTITION BY`. La diferencia es que todos los valores originales se conservan y se muestran. Además, muchas de las **funciones agregadas** mencionadas anteriormente también funcionan sin SQL GROUP BY.

Consejo Una base de datos a tu medida: con el [Hosting SQL Server](https://www.ionos.com/cloud/sql-server-hosting "Hosting SQL Server de IONOS") de IONOS, no solo podrás elegir entre MSSQL, MySQL o MariaDB, sino que también te beneficiarás de un rendimiento extraordinario, sólidas funciones de seguridad y asesoramiento personal.


This is a markdown version of: [https://www.ionos.mx/digitalguide/servidores/configuracion/sql-group-by/](https://www.ionos.mx/digitalguide/servidores/configuracion/sql-group-by/) for AI/LLM consumption.