# SQL GROUP BY: So fassen Sie identische Werte in einer Gruppe zusammen

Wenn Sie Zeilen mit identischen Werten in einer Gruppe zusammenfassen möchten, ist SQL GROUP BY die richtige Anweisung. Meistens wird sie in Kombination mit Aggregatsfunktionen verwendet.

## Was ist SQL GROUP BY?

In der [Structured Query Language](https://www.ionos.at/digitalguide/server/knowhow/was-ist-sql/) ist SQL GROUP BY eine Anweisung, die genutzt wird, um Zeilen mit identischen Werten in einer Gruppe zusammenzufassen. Sie wird mit dem [SQL-Befehl](https://www.ionos.at/digitalguide/server/konfiguration/sql-befehle/) `SELECT` verwendet und folgt auf die Anweisung WHERE. Häufig nutzt man SQL GROUP BY in Kombination mit Funktionen wie [SQL AVG()](https://www.ionos.at/digitalguide/server/konfiguration/sql-avg/), [SQL COUNT()](https://www.ionos.at/digitalguide/server/konfiguration/sql-count/), `MAX()`, `MIN()` oder `SUM()`. Dies erlaubt es Ihnen, **Berechnungen anzustellen und die Ergebnisse innerhalb Ihrer Tabelle abzubilden**. Insbesondere wenn eine Reihenfolge ermittelt oder Werte miteinander in Verbindung gesetzt werden sollen, ist die Anweisung sehr hilfreich.

## Syntax und Funktionsweise

Die grundsätzliche Syntax von SQL GROUP BY sieht aus wie folgt:

```sql
SELECT spalte1, spalte2, spalte3, …
FROM name_der_tabelle
GROUP BY spalte1, spalte2, spalte3, …;
```

Deutlich geläufiger ist allerdings die Ausführung mit einer `WHERE`-Klausel, durch die Sie bestimmte Bedingungen initiieren können. Diese Version sieht so aus:

```sql
SELECT spalte1, spalte2, spalte3, …
FROM name_der_tabelle
WHERE bedingung
GROUP BY spalte1, spalte2, spalte3, …
ORDER BY spalte1, spalte2, spalte3, …;
```

## Beispiel für die Verwendung mit COUNT()

Um zu veranschaulichen, wie Sie SQL GROUP BY nutzen können, erstellen wir eine einfache Tabelle namens „Kundenliste“. Diese enthält Spalten für eine Kundennummer, den Namen, den Standort und die gekauften Artikel:

<table>
  <thead>
    <tr>
      <th>Kundennummer</th>
      <th>Name</th>
      <th>Standort</th>
      <th>Artikel</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1427</td>
      <td>Schmidt</td>
      <td>Berlin</td>
      <td>13</td>
    </tr>
    <tr>
      <td>1377</td>
      <td>Schulz</td>
      <td>Hamburg</td>
      <td>9</td>
    </tr>
    <tr>
      <td>1212</td>
      <td>Peters</td>
      <td>Hamburg</td>
      <td>15</td>
    </tr>
    <tr>
      <td>1431</td>
      <td>Müller</td>
      <td>München</td>
      <td>22</td>
    </tr>
    <tr>
      <td>1118</td>
      <td>Becker</td>
      <td>Berlin</td>
      <td>10</td>
    </tr>
  </tbody>
</table>

Nun können wir SQL GROUP BY zum Beispiel in Kombination mit der Funktion `COUNT()` nutzen, um aufzulisten, aus welchen Städten wie viele Kunden und Kundinnen kommen. Hier der entsprechende Code:

```sql
SELECT Standort, COUNT(*) AS Anzahl
FROM Kundenliste
GROUP BY Standort;
```

Als Ergebnis erhalten wir diese neue Tabelle:

<table>
  <thead>
    <tr>
      <th>Standort</th>
      <th>Anzahl</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>München</td>
      <td>1</td>
    </tr>
    <tr>
      <td>Berlin</td>
      <td>2 \]</td>
    </tr>
    <tr>
      <td>Hamburg</td>
      <td>2</td>
    </tr>
  </tbody>
</table>

Hierbei nutzen wir die [SQL-Aliases](https://www.ionos.at/digitalguide/server/konfiguration/sql-aliases/), um die Ergebnisse als „Anzahl“ anzeigen zu lassen.

## Die Anweisung in Verbindung mit SUM()

Im nächsten Beispiel verwenden wir SQL GROUP BY in Kombination mit `SUM()`, um zu ermitteln und anzuzeigen, wie viele Artikel aus Hamburg bestellt wurden. Dafür nutzen wir diesen Code:

```sql
SELECT Standort, SUM(Artikel) AS Gesamt
FROM Kundenliste
WHERE Standort = 'Hamburg'
GROUP BY Standort;
```

Als Ergebnis erhalten wir:

<table>
  <thead>
    <tr>
      <th>Standort</th>
      <th>Gesamt</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Hamburg</td>
      <td>24</td>
    </tr>
  </tbody>
</table>

## Anwendung mit ORDER BY

Auch eine Kombination mit `ORDER BY` ist möglich. Hierbei sortieren wir für unsere Tabelle nach der höchsten Anzahl für bestellte Artikel pro Kunde bzw. Kundin und pro Stadt. Wir beginnen bei dem Standort, in dem ein Kunde oder eine Kundin die meisten Artikel erworben hat. Der entsprechende Code, für den wir SQL GROUP BY mit der Funktion `MAX()` und `ORDER BY` kombinieren, ist dieser:

```sql
SELECT Standort, MAX(Artikel) AS Meiste
FROM Kundenliste
GROUP BY Standort ORDER BY Meiste DESC;
```

Und die entsprechende Ausgabe:

<table>
  <thead>
    <tr>
      <th>Standort</th>
      <th>Meiste</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>München</td>
      <td>22</td>
    </tr>
    <tr>
      <td>Hamburg</td>
      <td>15</td>
    </tr>
    <tr>
      <td>Berlin</td>
      <td>13</td>
    </tr>
  </tbody>
</table>

## In Kombination mit der Anweisung HAVING

Auch mit [SQL HAVING](https://www.ionos.at/digitalguide/server/konfiguration/sql-having/) können Sie SQL GROUP BY kombinieren. Im folgenden Beispiel nehmen wir jene Kundinnen und Kunden aus der Liste, deren Kundennummer kleiner ist als 1300. Die übrigen Personen sortieren wir nach der Anzahl ihrer bestellten Artikel in aufsteigender Form. So sieht der Code aus:

```sql
SELECT Standort, Kundennummer, MIN(Artikel) AS Wenigste
FROM Kundenliste
GROUP BY Standort, Kundennummer HAVING Kundennummer > 1300;
```

Dadurch erhalten wir diese Tabelle als neue Ausgabe:

<table>
  <thead>
    <tr>
      <th>Standort</th>
      <th>Kundennummer</th>
      <th>Wenigste</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Hamburg</td>
      <td>1377</td>
      <td>9</td>
    </tr>
    <tr>
      <td>Berlin</td>
      <td>1427</td>
      <td>13</td>
    </tr>
    <tr>
      <td>München</td>
      <td>1431</td>
      <td>22</td>
    </tr>
  </tbody>
</table>

## Alternativen zu SQL GROUP BY

Eine beliebte Alternative zu SQL GROUP BY ist die Anweisung `PARTITION BY`. Der Unterschied ist, dass bei dieser auch alle ursprünglichen Werte beibehalten und angezeigt werden. Dazu funktionieren viele der weiter oben erwähnten **Aggregatsfunktionen** auch ohne SQL GROUP BY.

Tipp Eine Datenbank genau nach Ihren Vorstellungen: Mit [SQL-Server-Hosting](https://www.ionos.at/cloud/sql-server-hosting "SQL-Server-Hosting von IONOS") von IONOS haben Sie nicht nur die Wahl zwischen MSSQL, MySQL oder MariaDB, sondern profitieren in jedem Fall von einer herausragenden Performance, starken Sicherheitsfeatures und persönlicher Beratung auf Augenhöhe.


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