# SQL GROUP BY: Como agrupar valores idênticos

Se você deseja agrupar linhas com valores idênticos, a instrução SQL GROUP BY é a escolha certa. Geralmente, ela é utilizada em combinação com funções agregadas.

## O que é SQL GROUP BY?

Em [SQL (*Structured Query Language*)](https://www.ionos.com/pt-br/digitalguide/servidor/configuracao/aprender-sql-com-exemplos/), GROUP BY é uma instrução usada para agrupar linhas com valores idênticos em um grupo. Ela é usada com o comando SQL SELECT e segue a cláusula WHERE. Frequentemente, SQL GROUP BY é combinado com funções como [SQL AVG()](https://www.ionos.com/pt-br/digitalguide/servidor/configuracao/sql-avg/), [SQL COUNT()](https://www.ionos.com/pt-br/digitalguide/servidor/configuracao/sql-count/), `MAX()`, `MIN()` ou `SUM()`. Isso permite que você **realize cálculos e exiba os resultados em sua tabela**. A instrução é especialmente útil quando é necessário determinar uma ordem ou relacionar valores entre si.

## Sintaxe e funcionamento de SQL GROUP BY

A sintaxe básica do SQL GROUP BY é a seguinte:

```sql
SELECT coluna1, coluna2, coluna3, …
FROM nome_da_tabela
GROUP BY coluna1, coluna2, coluna3, …;
```

No entanto, é mais comum o uso da instrução com uma cláusula `WHERE`, que permite definir condições específicas. Essa versão se parece com isso:

```sql
SELECT coluna1, coluna2, coluna3, …
FROM nome_da_tabela
WHERE condição
GROUP BY coluna1, coluna2, coluna3, …
ORDER BY coluna1, coluna2, coluna3, …;
```

## Combinar SQL GROUP BY com COUNT()

Para ilustrar como usar o SQL GROUP BY, vamos criar uma tabela simples chamada “Lista de Clientes”. Ela contém colunas para o número do cliente, o nome, a localização e os itens comprados:

<table>
  <thead>
    <tr>
      <th>Número do Cliente</th>
      <th>Nome</th>
      <th>Localização</th>
      <th>Itens</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1427</td>
      <td>Schmidt</td>
      <td>Goiânia</td>
      <td>13</td>
    </tr>
    <tr>
      <td>1377</td>
      <td>Sampaio</td>
      <td>Navegantes</td>
      <td>9</td>
    </tr>
    <tr>
      <td>1212</td>
      <td>Pedroso</td>
      <td>Navegantes</td>
      <td>15</td>
    </tr>
    <tr>
      <td>1431</td>
      <td>Müller</td>
      <td>Maceió</td>
      <td>22</td>
    </tr>
    <tr>
      <td>1118</td>
      <td>Becker</td>
      <td>Goiânia</td>
      <td>10</td>
    </tr>
  </tbody>
</table>

Agora podemos usar o SQL GROUP BY em combinação com a função `COUNT()` para listar quantos clientes vêm de cada cidade. Aqui está o código correspondente:

```sql
SELECT Localização, COUNT(*) AS Quantidade
FROM Lista de Clientes
GROUP BY Localização;
```

Como resultado, obtemos esta nova tabela:

<table>
  <thead>
    <tr>
      <th>Localização</th>
      <th>Quantidade</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Maceió</td>
      <td>1</td>
    </tr>
    <tr>
      <td>Goiânia</td>
      <td>2</td>
    </tr>
    <tr>
      <td>Navegantes</td>
      <td>2</td>
    </tr>
  </tbody>
</table>

Aqui, utilizamos os [Aliases em SQL](https://www.ionos.com/pt-br/digitalguide/servidor/configuracao/sql-aliases/) para exibir os resultados como “Quantidade”.

## Combinar SQL GROUP BY com SUM()

No próximo exemplo, usamos SQL GROUP BY em combinação com `SUM()` para calcular e mostrar quantos itens foram pedidos em Navegantes. Para isso, usamos o seguinte código:

```sql
SELECT Localização, SUM(Itens) AS Total
FROM Lista de Clientes
WHERE Localização = 'Navegantes'
GROUP BY Localização;
```

Como resultado, obtemos:

<table>
  <thead>
    <tr>
      <th>Localização</th>
      <th>Total</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Navegantes</td>
      <td>24</td>
    </tr>
  </tbody>
</table>

## Combinar SQL GROUP BY com ORDER BY

Também é possível combinar com `ORDER BY`. Neste caso, ordenamos a tabela pela maior quantidade de itens comprados por cliente em cada cidade, começando pela localização onde o maior número de itens foi adquirido por um cliente. O código correspondente, onde combinamos SQL GROUP BY com as funções `MAX()` e `ORDER BY`, é o seguinte:

```sql
SELECT Localização, MAX(Itens) AS Maior
FROM Lista de Clientes
GROUP BY Localização ORDER BY Maior DESC;
```

E o resultado correspondente:

<table>
  <thead>
    <tr>
      <th>Localização</th>
      <th>Maior</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Maceió</td>
      <td>22</td>
    </tr>
    <tr>
      <td>Navegantes</td>
      <td>15</td>
    </tr>
    <tr>
      <td>Goiânia</td>
      <td>13</td>
    </tr>
  </tbody>
</table>

## Combinar SQL GROUP BY com HAVING

Você também pode combinar SQL GROUP BY com [SQL HAVING](https://www.ionos.com/pt-br/digitalguide/servidor/configuracao/sql-having/). No exemplo a seguir, removemos da lista os clientes cuja numeração seja inferior a 1300. As demais pessoas são ordenadas de acordo com a quantidade de itens comprados em ordem crescente. O código fica assim:

A seguir, temos o código SQL:

```sql
SELECT Localização, Número do Cliente, MIN(Itens) AS Menor
FROM Lista de Clientes
GROUP BY Localização, Número do Cliente HAVING Número do Cliente > 1300;
```

Isso resulta na seguinte tabela como nova saída:

<table>
  <thead>
    <tr>
      <th>Localização</th>
      <th>Número do Cliente</th>
      <th>Menor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Navegantes</td>
      <td>1377</td>
      <td>9</td>
    </tr>
    <tr>
      <td>Goiânia</td>
      <td>1427</td>
      <td>13</td>
    </tr>
    <tr>
      <td>Maceió</td>
      <td>1431</td>
      <td>22</td>
    </tr>
  </tbody>
</table>

## Alternativas ao SQL GROUP BY

Uma alternativa popular ao SQL GROUP BY é a instrução `PARTITION BY`. A diferença é que, com essa instrução, todos os valores originais também são mantidos e exibidos. Além disso, muitas **funções agregadas** também funcionam sem o uso da cláusula SQL GROUP BY.

Dica Um banco de dados exatamente como você deseja: Com o [SQL Server Hosting](https://www.ionos.com/cloud/sql-server-hosting "SQL Server Hosting — IONOS") da IONOS, você tem a opção de escolher entre MSSQL, MySQL ou MariaDB, e em todos os casos, você se beneficia de um desempenho excepcional, fortes recursos de segurança e consultoria personalizada.


This is a markdown version of: [https://www.ionos.com/pt-br/digitalguide/servidor/configuracao/sql-group-by/](https://www.ionos.com/pt-br/digitalguide/servidor/configuracao/sql-group-by/) for AI/LLM consumption.