# SQL GROUP BY: raggruppare dati che hanno valori uguali

SQL GROUP BY è il comando ideale se desideri raggruppare dati con valori identici. Questa istruzione è ampiamente utilizzata in combinazione con funzioni di aggregazione.

## Cos’è SQL GROUP BY?

Nello [Structured Query Language](https://www.ionos.it/digitalguide/server/know-how/che-cose-sql/) SQL GROUP BY è un’istruzione che viene usata per raggruppare righe con valori identici. Viene solitamente utilizzata insieme al [comando SQL](https://www.ionos.it/digitalguide/server/configurazione/comandi-sql/) `SELECT` e usa la clausola WHERE per filtrare le righe prima che vengano raggruppate. Spesso, SQL GROUP BY si usa in combinazione con funzioni come [SQL AVG()](https://www.ionos.it/digitalguide/server/configurazione/sql-avg/), [SQL COUNT()](https://www.ionos.it/digitalguide/server/configurazione/sql-count/), `MAX()`, `MIN()` o `SUM()`. In questo modo è possibile **eseguire calcoli e visualizzare i risultati all’interno della tabella**. È particolarmente utile quando si desidera determinare una sequenza o mettere in relazione i valori tra loro.

## Sintassi e funzionamento

La sintassi di base di SQL GROUP BY è la seguente:

```sql
SELECT colonna1, colonna2, colonna3, …
FROM nome_della_tabella
GROUP BY colonna1, colonna2, colonna3, …;
```

Questo comando viene più spesso eseguito in concomitanza con la clausola `WHERE`, che consente di porre determinate condizioni. In questo caso il codice si scrive così:

```sql
SELECT colonna1, colonna2, colonna3, …
FROM nome_della_tabella
WHERE condizione
GROUP BY colonna1, colonna2, colonna3, …
ORDER BY colonna1, colonna2, colonna3, …;
```

## Esempio di utilizzo con COUNT()

Per mostrare come funziona l’istruzione SQL GROUP BY, creiamo una tabella molto semplice chiamata “elenco clienti”. Questa tabella include colonne per il numero cliente, il nome, la città e il numero di articoli acquistati:

<table>
  <thead>
    <tr>
      <th>Numero cliente</th>
      <th>Nome</th>
      <th>Città</th>
      <th>Articoli</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1427</td>
      <td>Rossi</td>
      <td>Roma</td>
      <td>13</td>
    </tr>
    <tr>
      <td>1377</td>
      <td>Bianchi</td>
      <td>Milano</td>
      <td>9</td>
    </tr>
    <tr>
      <td>1212</td>
      <td>Ferrari</td>
      <td>Milano</td>
      <td>15</td>
    </tr>
    <tr>
      <td>1431</td>
      <td>Costa</td>
      <td>Firenze</td>
      <td>22</td>
    </tr>
    <tr>
      <td>1118</td>
      <td>Russo</td>
      <td>Roma</td>
      <td>10</td>
    </tr>
  </tbody>
</table>

Ora possiamo usare SQL GROUP BY in combinazione con la funzione `COUNT()`, ad esempio per creare un elenco di quanti clienti provengono da una determinata città. Il codice si scrive così:

```sql
SELECT Città, COUNT(*) AS Quantità
FROM Elenco_clienti
GROUP BY Città;
```

Il risultato è questa nuova tabella:

<table>
  <thead>
    <tr>
      <th>Città</th>
      <th>Quantità</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Firenze</td>
      <td>1</td>
    </tr>
    <tr>
      <td>Roma</td>
      <td>2 \]</td>
    </tr>
    <tr>
      <td>Milano</td>
      <td>2</td>
    </tr>
  </tbody>
</table>

Quindi, per poter visualizzare i risultati come “Quantità” usiamo gli [alias SQL](https://www.ionos.it/digitalguide/server/configurazione/alias-sql/).

## L’istruzione in combinazione con SUM()

Nel prossimo esempio usiamo SQL GROUP BY in combinazione con `SUM()` per determinare e visualizzare quanti articoli sono stati ordinati da Milano. Per farlo usiamo questo codice:

```sql
SELECT Città, SUM(Articoli) AS Totale
FROM Elenco_clienti
WHERE Città = 'Milano'
GROUP BY Città;
```

Il risultato è il seguente:

<table>
  <thead>
    <tr>
      <th>Città</th>
      <th>Totale</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Milano</td>
      <td>24</td>
    </tr>
  </tbody>
</table>

## Uso in combinazione con ORDER BY

Il comando SQL GROUP BY può essere usato anche in combinazione con `ORDER BY`. In questo caso organizziamo la tabella ordinandola per città e cliente in base al numero massimo di articoli acquistati, partendo dalla località in cui un cliente ha effettuato il maggior numero di ordini. Utilizziamo SQL GROUP BY in combinazione con la funzione `MAX()` e `ORDER BY`:

```sql
SELECT Città, MAX(Articoli) AS Maggiore
FROM Elenco_clienti
GROUP BY Città ORDER BY Maggiore DESC;
```

L’output si legge così:

<table>
  <thead>
    <tr>
      <th>Città</th>
      <th>Maggiore</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Firenze</td>
      <td>22</td>
    </tr>
    <tr>
      <td>Milano</td>
      <td>15</td>
    </tr>
    <tr>
      <td>Roma</td>
      <td>13</td>
    </tr>
  </tbody>
</table>

## Uso in combinazione con la clausola HAVING

È possibile integrare SQL GROUP BY anche con [SQL HAVING](https://www.ionos.it/digitalguide/server/configurazione/sql-having/). Nell’esempio seguente selezioniamo dalla lista solo i clienti con un numero cliente più piccolo di 1.300. Successivamente, ordiniamo le persone rimanenti in base al numero crescente di articoli ordinati. Questo il codice corrispondente:

```sql
SELECT Città, Numero cliente, MIN(Articoli) AS Minore
FROM Elenco_clienti
GROUP BY Città, Numero cliente HAVING Numero cliente > 1300;
```

Così facendo si ottiene la tabella con il nuovo output:

<table>
  <thead>
    <tr>
      <th>Città</th>
      <th>Numero cliente</th>
      <th>Minore</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Milano</td>
      <td>1377</td>
      <td>9</td>
    </tr>
    <tr>
      <td>Roma</td>
      <td>1427</td>
      <td>13</td>
    </tr>
    <tr>
      <td>Firenze</td>
      <td>1431</td>
      <td>22</td>
    </tr>
  </tbody>
</table>

## Alternative a SQL GROUP BY

Il comando `PARTITION BY` è un’alternativa molto usata a SQL GROUP BY. La differenza sta nel fatto che in questo caso si mantengono e sono visualizzati anche tutti i valori originari. In questo caso, molte delle **funzioni aggregate** menzionate in precedenza funzionano anche senza SQL GROUP BY.

Consiglio Una banca dati come vuoi tu: grazie all’\[hosting SQL server\](https://www.ionos.it/cloud/sql-server-hosting server-hosting “Hosting SQL di IONOS”) di IONOS non puoi scegliere solo fra MSSQL, MySQL o MariaDB, ma approfitti anche di ottime prestazioni, sicurezza eccellente e consulenza specializzata.


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