Frage von Mavinn, 69

SQL, für was sind Gruppen?

Hallo, Ich mache gerade einige Aufgaben für mein Studium im Fach Datenbanken. Hier muss ich gerade einige Anfragen schreiben. Jetzt hab ich schon einige Male den GROUP BY Befehl verwendet, nach dem ich mir aber einmal die Definition einer Gruppe in unseren Vorlesungsunterlagen und die welche im Internet genannt werden durchgelesen hab, versteh ich einfach nicht, warum ich eine Gruppe brauche.

Kann jemand von euch versuchen, es mir nochmal zu erklären?

Vielen Dank und euch noch einen schönen Tag :)

Antwort
von Suboptimierer, 28

GROUP BY tritt meistens zusammen mit Aggregierungsfunktionen wie SUM oder COUNT auf.

Du kannst zum Beispiel in einer Umsatztabelle, in der einzelne Kunden für mehrere Umsätze gesorgt haben, nach allen Kunden gruppieren (GROUP BY) und zu ihnen den im Zeitraum erzielten Gesamtumsatz (SUM) dir anzeigen lassen.

Ohne Aggregatsfunktion kannst du dir alle vorkommenen Gruppen anzeigen lassen. Beispiel: SELECT abteilung FROM mitarbeiter GROUP BY abteilung

Alle Abteilungen, in denen es Mitarbeiter gibt, werden aufgelistet.

Antwort
von azmd108, 45

GROUP BY nutzt man meines WIssens zur Aggregierung.

Also zum zusammenfassen/gruppieren von Werten.

Beispiel:

Wenn du beispielsweise in deiner Datenbank Umsätze je Tag des Jahres 2015 stehen hast, kannst du so z.B. die Umsätze je Monat abfragen (eben nach Monaten gruppiert).

Antwort
von KnusperPudding, 25

Mit GroupBy bekommt man eben die Werte Gruppiert je nach Angabe der Felder zurück. Über Aggregats-Funktionen kannst du dir zu den angezeigten Werten eben noch weitere Information Bereitstellen lassen. z.B. 

mit COUNT(Feldname) die Anzahl der Felder in der Aggregation oder MIN(Feldname) für den Niedrigsten Zahlenwert eines Feldes, welches du nicht gruppiert hast.

Verwendungsbeispiel:

ID  Vorname   Nachname  Alter

1   Klaus     Meier     40
2   Kerstin   Meier     35
3   Hubert    Stromberg 20
4   Astrid    Stromberg 18

Wenn du nun wissen möchtest: Wie viele unterschiedliche Nachnamen gibt es in deiner Tabelle und wie ist deren Durchschnittsalter kannst du das über eine Gruppierung lösen:

SELECT Nachname, COUNT(Nachname) As Anzahl, AVG(Alter) As Durchschnittsalter
FROM Kontakte
GROUP BY Nachname
Kommentar von Mavinn ,

Danke erstmal für deine super Antwort.
Habe ich es richtig verstanden, dass ich mit einer Gruppe bezwecke, dass ich mehrere Zeilen zusammenfasse um sie zum Beispiel mit einem Count() verarbeiten zu können?

Kommentar von KnusperPudding ,

Ja, genau. Richtig.

Unter der Einschränkung dass du nur Spaltennamen verwenden kannst, die du auch bei Group By angegeben hast oder die du in Verbindung mit einer Aggregats-Funktion wie: AVG/MIN/MAX/SUM nutzt.


Entsprechend wäre der Output oben:

Nachname  Anz.   Durchschn.Alter
----------------------------
Meier       2    37.5
Stromberg   2    19
Kommentar von Mavinn ,

Endlich verstanden! 
Vielen, vielen Dank! 

Kommentar von KnusperPudding ,

Freut mich, kein Problem.

Antwort
von kokolaka, 41

Wenn du Gruppen hast musst du nicht immer einzelne User hinzufügen, Als Beispiel ein Unternehmen mit 80 Leuten 20 im Bereich Verkauf, welche alle logischerweise in der Gruppe z.B grp_Verkauf sind, dann kannst du mit einer Gruppen Zuweisung 20 Leuten die Berechtigungen vergeben


GROUP BY ist was anderes und hat nichts mit einer Gruppe zu tun das ist eine Sortierung, z.B GROUP BY ASC (Nach Alphabet)

 Ups Sry hab Order By erklärt, hatte schon lange kein SQL mehr X)

Kommentar von ShitzOvran ,

Diese von dir angesprochene Gruppe hat nichts mit dem Group By in einem SQL-Statement zutun

Kommentar von kokolaka ,

Habs anfangs nicht ganz verstanden, und nachträglich noch den GROUP BY erklärt .. :P

Antwort
von wotan38, 5

Die GROUP BY Anweisung wird eigentlich recht häufig gebraucht. Im Prinzip werden Sätze mit gemeinsamen Merkmalen zu Satzgruppen zusammengefasst und als eine Zeile ausgegeben. Diese Zeile kann nur Datenfelder enthalten, die nach der definierten Vorgabe bei all diesen Sätzen gleich sind. Angaben zu Datenfeldern, die innerhalb einer Satzgruppe variieren können, lassen sich nur als Funktionsergebnis ausgeben wie z.B. als Mittelwert, maxi- oder minimaler Wert, Summe oder Anzahl.

Die HAVING-Klausel kann ergänzend zum GROUP BY angegeben werden und stellt eine einschränkende Bedingung dar.

Beispiel:

HAVING COUNT(*) > 5

gibt an, dass nur solche Gruppen ausgegeben werden sollen, deren Anzahl > 5 ist. Eine häufige Anwendung ist die Ermittlung mehrfach vorhandener Sätze durch die Angabe > 1.


Keine passende Antwort gefunden?

Fragen Sie die Community