| Home - SQL Befehle - Datenmanipulation - Daten abfragen | www.sqldocu.com | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| zurück | vor | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Mit der GROUP BY Klausel können Daten gruppiert werden. Will man wissen, wie viele
Crewmitglieder in einer Abteilung arbeiten so wird dies mit GROUP BY erreicht (siehe
Tabelle crew). Zusätzlich kann das
Ergebnis mit der HAVING Klausel gefiltert werden. Der ANSI Standart erlaubt es sogar, HAVING
ohne GROUP BY zu verwenden. Da dies unüblich ist, wird auf diese Möglichkeit nicht
eingegangen. Sehr häufig wird GROUP BY mit Funktionen wie COUNT(), AGV() verwendet.
In der GROUP BY Klausel dürfen nur Spalten verwendet werden, die in der SELECT Anweisung
vorkommen.
Beispiele:
SELECT spalte1, COUNT(*) FROM TabellenName GROUP BY spalte1
SELECT spalte1, COUNT(*) FROM TabellenName GROUP BY spalte1 HAVING COUNT(*)>4
Diese Tabellen werden verwendet um SQL besser darstellen zu können.
TabelleName: crew Spalte1 hat den Namen abteilung Spalte2 hat den Namen name Spalte3 hat den Namen status status=0—>krank status=1—>gesund
TabelleName: crewFoederation Spalte1 hat den Namen abteilung Spalte2 hat den Namen name Spalte3 hat den Namen nr_schiff Spalte4 hat den Namen status status=0—>krank status=1—>gesund
TabelleName: raumschiff Die Tabelle raumschiff besteht aus 3 Spalten und 5 Reihen Spalte1 hat den Namen nr_schiff. Spalte2 hat den Namen name Spalte3 hat den Namen status status=0 —> Raumschiff einsatzbereit status=1 —> Raumschiff in Reparatur
SELECT abteilung, count (*) FROM crew GROUP BY abteilung
Ergebnistabelle:
SELECT DISTINCT abteilung, count (*) FROM crew führt zu einer Fehlermeldung des SQL Compilers!!!! PHP Syntax PERL Syntax
SELECT abteilung, COUNT(*) FROM crew GROUP BY abteilung HAVING COUNT(*)>3
Ergebnistabelle:
PHP Syntax PERL Syntax
SELECT abteilung, AVG(status)*100 COUNT(*), status FROM crew GROUP BY abteilung, status HAVING status=1
Ergebnistabelle:
Spalte 1: Name der Abteilung Spalte 2: Prozentsatz, wie viele Mitglieder einer Abteilung gesund sind (z.B: in der Abteilung maschinenraum sind 75% gesund). Die Funktion AVG(status) berechnet den Durchschnitt der Spalte status. Da die Reihe nur 0 oder 1 enthält entspricht der Durchschnitt*100 dem Prozentsatz. Spalte 3: Anzahl der gesunden Mitglieder der Abteilung Spalte 4: status. Da wir in der HAVING Bedingung status=1 gewählt haben, enthält jeder Datensatz status=1 PHP Syntax PERL Syntax
SELECT T2.name, COUNT(T1.name) FROM crewFoederation WHERE T1.nr_schiff=T2.nr_schiff GROUP BY T2.name
Ergebnistabelle:
SELECT T2.name, COUNT(T1.name), T1.status FROM crewFoederation WHERE T1.nr_schiff=T2.nr_schiff GROUP BY T2.name, T1.status HAVING T1.status=1
Ergebnistabelle:
Hinweis: Dieses Beispiel dient nur zum demonstrations Zweck. Das gleiche Ergebnis hätten wir mit folgender Anweisung erreicht: SELECT T2.name, COUNT(T1.name), T1.status FROM crewFoederation WHERE T1.nr_schiff=T2.nr_schiff AND T1.status=1 GROUP BY T2.name PHP Syntax PERL Syntax
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||