# SQL Gruppierungen- was ist das?



## blender (24. Sep 2020)

Moin!
Ihr kennt doch sicherlich GROUP BY....
Nun habe ich bis heute noch nicht richtig verstanden, was das überhaupt ist....
kann mir da jemand weiterhelfen und es wirklich verständlich (mit Beispielen wäre es optimal) erklären? Wäre sehr sehr dankbar,
ich danke euch


----------



## M.L. (24. Sep 2020)

Group by heisst "gruppieren nach", wobei die Ergebnismenge nach realistischen Kriterien gruppiert werden kann, ein kleines Beispiel: https://www.datenbanken-verstehen.de/sql-tutorial/sql-group_by-befehl/


----------



## Maliko (25. Sep 2020)

GROUP BY sorgt in erster Linie dafür, dass wenn nach den entsprechenden Kriterien mehrere Datensätze den selben Inhalt haben wird nur noch ein Datensatz angezeigt. 

Beispiel


idfarbezahlbaum1rot1eiche2grün2eiche3grün1eiche

Machst du jetzt nur einen Select auf den Baum, würdest du dreimal den selben Wert zurückerhalten. Machst du aber ein GroupBy auf den Baum, wird dir die Eiche nur einmal angezeigt.


----------



## kneitzel (25. Sep 2020)

Maliko hat gesagt.:


> GROUP BY sorgt in erster Linie dafür, dass wenn nach den entsprechenden Kriterien mehrere Datensätze den selben Inhalt haben wird nur noch ein Datensatz angezeigt.
> 
> Beispiel
> 
> ...



Also das alleine würde ich so nicht stehen lassen, denn da gäbe es ja auch noch das SELECT DISTINCT, welches genau sowas macht.

Bei der Gruppierung ist der wichtige Unterschied, dass nicht angegebene Felder mit einer Methode zusammen gefasst werden können. Also sowas wie COUNT, SUM,  ...:
`SELECT baum, SUM(zahl) as baumAnzahl, COUNT(zahl) anzahlEintraege FROM sometable GROUP BY baum;`


----------



## Dompteur (25. Sep 2020)

Ein häufiger Anwendungsfall für GROUP BY ist die Kombination von Selection und statistischer Auswertung.

Mit den Daten aus dem obigen Beispiel könntest du ein paar Auswertungen gruppiert nach "farbe" machen:


```
SELECT farbe,
     , COUNT(zahl)  -- zählt die Anzahl der Sätze mit gleicher Farbe
     , MAX(zahl)    -- Maximalwert der Spalte "zahl" für alle Sätze der gleichen Farbe
     , MIN(zahl)    -- Minimalwert der Spalte "zahl" für alle Sätze der gleichen Farbe
     , SUM(zahl)    -- Summe der Werte aus "zahl" für alle Sätze der gleichen Farbe
     , AVG(zahl)    -- Durchschnittswert der Werte aus "zahl" für alle Sätze der gleichen Farbe
FROM tabelle
GROUP BY farbe
```

Das Ergebnis sieht dann so aus:


*farbe**count**max**min**sum**avg*rot11111grün22131.5


Also für "grün" gilt es beispielsweise

2 Sätze
dabei ist der höchste Wert für zahl gleich 2
der niedrigste Wert für zahl ist 1
die Summe aller zahl-Werte für "grün" ist 3
der Durchschnitt aller zahl-Werte für "grün" Werte ist 1.5


----------

