Zum Hauptinhalt springen

4) Gruppen

Mit der group by-Klausel kannst Du Datensätze in Gruppen einteilen. Dabei wird jeder Datensatz genau einer Gruppe zugeordnet.

Verwendet wird die Tabelle 'cia' mit folgendem ER-Diagramm:

er_cia

und folgenden Daten:

MariaDB [cia]> SELECT * FROM cia;
+----------------------------+-----------------+----------+-----------+------------+
| Name | Region | Flaeche | Einwohner | BIP |
+----------------------------+-----------------+----------+-----------+------------+
| ?sterreich | Europa | 83858 | 8131111 | 1906000000 |
| Afghanistan | Asien | 652000 | 25838797 | 2147483647 |
| Albanien | Europa | 28748 | 3490435 | 2147483647 |
| Algerien | Afrika | 2381740 | 31193917 | 2147483647 |
| Amerikanische Samoa-Inseln | Ozeanien | 199 | 65446 | 1500000000 |
| Andorra | Europa | 468 | 66824 | 1200000000 |
| Angola | Afrika | 1246700 | 10145267 | 1160000000 |
| Anguilla | Mittelamerika | 91 | 11797 | 88000000 |
| Antarktik | Antarktis | 14000000 | 0 | 0 |
| Antigua und Barbuda | Mittelamerika | 442 | 66422 | 524000000 |
| Argentinien | S?damerika | 2766890 | 3695182 | 2147483647 |
| Armenien | Osteuropa | 29800 | 3344336 | 990000000 |
| Aruba | Mittelamerika | 193 | 69539 | 1600000000 |
| Ashmore und Cartier Inseln | S?dostasien | 5 | 0 | 0 |
| Australien | Ozeanien | 7686850 | 19169083 | 2147483647 |
| Azerbaijan | Osteuropa | 86600 | 7748163 | 1400000000 |
| Bahamas | Mittelamerika | 13940 | 294982 | 558000000 |
| Bahrain | Mittlerer Osten | 620 | 634137 | 860000000 |
| Baker Island | Ozeanien | 1 | 0 | 0 |
| Bangladesh | Asien | 144000 | 129194224 | 1870000000 |
+----------------------------+-----------------+----------+-----------+------------+
20 rows in set (0.000 sec)

Wir können die Datensätze der cia-Datenbank nach der Fläche gruppieren und dann die Regionen ausgeben. Nun werden die einzelnen Länder absteigend nach der Fläche Sortiert

MariaDB [cia]> SELECT Region, Name
-> FROM cia
-> GROUP BY Flaeche desc;
+-----------------+----------------------------+
| Region | Name |
+-----------------+----------------------------+
| Antarktis | Antarktik |
| Ozeanien | Australien |
| S?damerika | Argentinien |
| Afrika | Algerien |
| Afrika | Angola |
| Asien | Afghanistan |
| Asien | Bangladesh |
| Osteuropa | Azerbaijan |
| Europa | ?sterreich |
| Osteuropa | Armenien |
| Europa | Albanien |
| Mittelamerika | Bahamas |
| Mittlerer Osten | Bahrain |
| Europa | Andorra |
| Mittelamerika | Antigua und Barbuda |
| Ozeanien | Amerikanische Samoa-Inseln |
| Mittelamerika | Aruba |
| Mittelamerika | Anguilla |
| S?dostasien | Ashmore und Cartier Inseln |
| Ozeanien | Baker Island |
+-----------------+----------------------------+
20 rows in set (0.000 sec)

Der Mehrwert des GROUP-BY Befehls ergibt sich daraus, dass man mit den Aggregatfunktionen statistische Auswertungen der Gruppen vornehmen kann.

Wir wollen die Einwohnerzahl der Regionen und deren durchschnittliches Bruttosozialprodukt ausgeben:

MariaDB [cia]> SELECT Region, SUM(Einwohner), AVG(BIP) 
-> FROM cia
-> GROUP BY Region;
+-----------------+----------------+-----------------+
| Region | SUM(Einwohner) | AVG(BIP) |
+-----------------+----------------+-----------------+
| Afrika | 41339184 | 1653741823.5000 |
| Antarktis | 0 | 0.0000 |
| Asien | 155033021 | 2008741823.5000 |
| Europa | 11688370 | 1751161215.6667 |
| Mittelamerika | 442740 | 692500000.0000 |
| Mittlerer Osten | 634137 | 860000000.0000 |
| Osteuropa | 11092499 | 1195000000.0000 |
| Ozeanien | 19234529 | 1215827882.3333 |
| S?damerika | 3695182 | 2147483647.0000 |
| S?dostasien | 0 | 0.0000 |
+-----------------+----------------+-----------------+
10 rows in set (0.000 sec)

Der GROUP-BY Befehl kann ich in Zusammenhang mit dem WHERE Befehl verwendet werden wie in diesem Beispiel, wo wir erst alle Einträge, wo die Summe aller Länder in einem Kontinent mehr als 10.000.000 Einwohnern sind, und diese dann nach Region Gruppieren.

MariaDB [cia]> SELECT Region, sum(Einwohner) 
-> FROM cia
-> WHERE Einwohner > 10000000
-> GROUP BY Region;
+----------+----------------+
| Region | sum(Einwohner) |
+----------+----------------+
| Afrika | 41339184 |
| Asien | 155033021 |
| Ozeanien | 19169083 |
+----------+----------------+
3 rows in set (0.000 sec)