MySQL Aggregatfunktionen: SUMME, ANZAHL, AVG & MAX
⚡ Intelligente Zusammenfassung
Aggregatfunktionen in MySQL Führt eine Berechnung über mehrere Zeilen einer einzelnen Spalte durch und gibt einen zusammengefassten Wert zurück. Die fünf ISO-Standardfunktionen – COUNT, SUM, AVG, MIN und MAX – sie bilden die Grundlage für nahezu jeden Bericht, den eine Datenbank erstellt.

Was sind Aggregatfunktionen in MySQL?
An Aggregatfunktion Liest mehrere Zeilen einer einzelnen Spalte und fasst sie zu einem Wert zusammen. Aggregatfunktionen dienen im Wesentlichen folgenden Zwecken:
- Berechnungen über mehrere Zeilen hinweg durchführen
- Einer einzelnen Spalte einer Tabelle
- Und einen einzelnen Wert zurückgeben.
Die ISO-Norm definiert fünf (5) Aggregatfunktionen, nämlich:
- ANZAHL
- SUM
- AVG
- MIN
- MAX
Eine Regel gilt für alle fünf: Aggregatfunktionen ignorieren NULL-WerteCOUNT(*) ist die einzige Ausnahme, und wir werden im Folgenden sehen, warum.
Warum Aggregatfunktionen verwenden?
Die Informationsbedürfnisse variieren je nach Organisationsebene. Führungskräfte der obersten Ebene interessieren sich in der Regel für Gesamtzahlen, nicht für individuelle Details.
Mithilfe von Aggregatfunktionen können wir einfach zusammengefasste Daten aus unserer Datenbank erstellen.
Beispielsweise kann das Management aus unserer Myflix-Datenbank die folgenden Berichte anfordern:
- Am wenigsten ausgeliehene Filme.
- Die meisten ausgeliehenen Filme.
- Durchschnittliche Anzahl der Ausleihen jedes Films pro Monat.
Alle oben genannten Berichte stammen aus Aggregatfunktionen. Schauen wir uns jeden einzelnen genauer an.
COUNT-Funktion
Die Funktion COUNT gibt die Gesamtzahl der Werte im angegebenen Feld zurück, sowohl bei numerischen als auch bei nicht-numerischen Datentypen. Wie jede Aggregatfunktion schließt auch COUNT(Spalte) NULL-Werte aus.
COUNT(*) ist eine spezielle Funktion, die die Anzahl aller Zeilen in einer Tabelle zurückgibt. Sie zählt auch NULL-Werte und Duplikate, da es Zeilen statt Werte zählt.
Die Tabelle „movierentals“ enthält folgende Daten:
| Referenznummer | Transaktionsdatum | Rückflugdatum | Mitgliedsnummer | movie_id | movie_ zurückgegeben |
|---|---|---|---|---|---|
| 11 | 20-06-2012 | NULL | 1 | 1 | 0 |
| 12 | 22-06-2012 | 25-06-2012 | 1 | 2 | 0 |
| 13 | 22-06-2012 | 25-06-2012 | 3 | 2 | 0 |
| 14 | 21-06-2012 | 24-06-2012 | 2 | 2 | 0 |
| 15 | 23-06-2012 | NULL | 3 | 3 | 0 |
Nehmen wir an, wir möchten die Anzahl der Ausleihen des Films mit der ID 2 ermitteln.
SELECT COUNT(`movie_id`) FROM `movierentals` WHERE `movie_id` = 2;
Dies wird ausgeführt in MySQL Werkbank against myflixdb gibt 3 zurück, da drei Zeilen die movie_id 2 enthalten.
| COUNT(`movie_id`) |
|---|
| 3 |
DISTINCT-Schlüsselwort
COUNT beantwortet die Frage „Wie viele?“. Die nächste Frage lautet üblicherweise „Wie viele?“. anders „ones“, und genau dafür ist DISTINCT da.
Das Schlüsselwort DISTINCT entfernt Duplikate aus unseren Ergebnissen nach Gruppierung.ping identische Werte zusammen, genau wie die obige Abbildung zeigt.
Führen wir zunächst eine einfache Abfrage aus.
SELECT `movie_id` FROM `movierentals`;
| movie_id |
|---|
| 1 |
| 2 |
| 2 |
| 2 |
| 3 |
Nun die gleiche Abfrage mit dem Schlüsselwort DISTINCT:
SELECT DISTINCT `movie_id` FROM `movierentals`;
DISTINCT lässt die doppelten Datensätze aus:
| movie_id |
|---|
| 1 |
| 2 |
| 3 |
COUNT vs COUNT(*) vs COUNT(DISTINCT): Welche Funktion sollten Sie verwenden?
DISTINCT kann auch platziert werden innerhalb eine Aggregatfunktion, und genau hier verlieren die meisten Anfänger. track dieser Zeilen werden tatsächlich gezählt. Die vier untenstehenden Formulare verwenden alle dieselbe fünfzeilige Tabelle „movierentals“, die bereits gezeigt wurde, liefern aber nicht alle dasselbe Ergebnis. Der Unterschied lässt sich auf zwei Fragen zurückführen: Zählt das Formular Zeilen oder Werte, und werden Duplikate beibehalten?
| Form | Worauf es ankommt | Ergebnis auf movierentals |
|---|---|---|
| COUNT (*) | Jede Zeile, einschließlich Duplikaten und Zeilen, die vollständig NULL sind. | 5 |
| COUNT(`movie_id`) | Alle nicht-NULL-Werte in der Spalte, einschließlich Duplikate. | 5 |
| COUNT(`return_date`) | Nur Nicht-NULL-Werte – die beiden NULL-Rückgabewerte werden übersprungen. | 3 |
| COUNT(DISTINCT `movie_id`) | Nur eindeutige Nicht-NULL-Werte | 3 |
SELECT COUNT(*) AS `all_rows`, COUNT(`return_date`) AS `returned_rows`, COUNT(DISTINCT `movie_id`) AS `unique_movies` FROM `movierentals`;
💡 Tipp: Verwenden Sie COUNT(*) für die Zeilenanzahl, COUNT(Spalte), wenn NULL „trifft nicht zu“ bedeuten soll, und COUNT(DISTINCT Spalte) für eindeutige Werte. Das Gegenteil von DISTINCT ist ALL – die Standardeinstellung, die daher selten explizit angegeben wird.
MIN-Funktion
Die MIN-Funktion gibt den kleinsten Wert im angegebenen Tabellenfeld zurück.
Angenommen, wir möchten das Jahr wissen, in dem der älteste Film in unserer Bibliothek veröffentlicht wurde. MySQLDie MIN-Funktion liefert uns das.
SELECT MIN(`year_released`) FROM `movies`;
Ergebnis:
| MIN(`year_released`) |
|---|
| 2005 |
MAX-Funktion
Wie der Name schon sagt, ist die MAX-Funktion das Gegenteil der MIN-Funktion. Es gibt den größten Wert aus dem angegebenen Tabellenfeld zurück.
Angenommen, wir möchten das Jahr ermitteln, in dem der neueste Film in unserer Datenbank erschienen ist. Das folgende Beispiel liefert dieses Ergebnis.
SELECT MAX(`year_released`) FROM `movies`;
Ergebnis:
| MAX(`year_released`) |
|---|
| 2012 |
SUMME-Funktion
MIN und MAX wählen einen vorhandenen Wert aus einer Spalte aus. SUMME und AVG Berechne eine neue Zahl aus der gesamten Spalte.
Angenommen, wir möchten die Gesamtsumme der bisher geleisteten Zahlungen ermitteln. MySQL SUM Funktion Gibt die Summe aller Werte in der angegebenen Spalte zurück.. SUM funktioniert nur bei numerischen Feldern und NULL-Werte werden vom Ergebnis ausgeschlossen.
Die folgende Tabelle zeigt die Daten in der Zahlungstabelle.
| Zahlungs_ID | Mitgliedsnummer | Zahlungsdatum | Beschreibung | Betrag_ gezahlt | externe_Referenznummer |
|---|---|---|---|---|---|
| 1 | 1 | 23-07-2012 | Zahlung für Filmverleih | 2500 | 11 |
| 2 | 1 | 25-07-2012 | Zahlung für Filmverleih | 2000 | 12 |
| 3 | 3 | 30-07-2012 | Zahlung für Filmverleih | 6000 | NULL |
Die unten gezeigte Abfrage ruft alle getätigten Zahlungen ab und summiert sie zu einem einzigen Ergebnis: 2500 + 2000 + 6000 = 10500.
SELECT SUM(`amount_paid`) FROM `payments`;
Ergebnis:
| SUMME(`amount_paid`) |
|---|
| 10500 |
AVG Funktion
Das MySQL AVG Funktion gibt den Durchschnitt der Werte in einer angegebenen Spalte zurück. Genau wie die SUM-Funktion Funktioniert nur bei numerischen Datentypen.
Angenommen, wir möchten den durchschnittlich gezahlten Betrag ermitteln. Wir können die folgende Abfrage verwenden, die die Summe von 10500 durch die drei nicht-NULL-Zahlungszeilen teilt.
SELECT AVG(`amount_paid`) FROM `payments`;
Ergebnis:
| AVG(`amount_paid`) |
|---|
| 3500 |
⚠️ Warnung: AVG Die Division erfolgt durch die Anzahl der Zeilen ohne NULL-Werte, nicht durch die Zeilenanzahl der Tabelle. Ein NULL-Wert wird übersprungen, anstatt als Null gezählt zu werden, was den Durchschnitt unbewusst erhöht. AVG(IFNULL(`amount_paid`, 0)) wenn ein fehlender Wert Null bedeutet.
Praktisches Beispiel: Kombinieren von Aggregatfunktionen mit GROUP BY
Jede der obigen Funktionen lieferte einen Wert für die gesamte Tabelle. Hinzufügen eines GRUPPIERE NACH Die Klausel gibt eine Zahl zurück pro Gruppe stattdessen – und so entstehen echte Berichte.
Im folgenden Beispiel werden die Mitglieder nach Namen gruppiert und anschließend die Gesamtzahl der Zahlungen, der durchschnittliche Zahlungsbetrag und die Gesamtsumme der Zahlungsbeträge für jedes Mitglied ermittelt.
SELECT m.`full_names`, COUNT(p.`payment_id`) AS `paymentscount`, AVG(p.`amount_paid`) AS `averagepaymentamount`, SUM(p.`amount_paid`) AS `totalpayments` FROM members m, payments p WHERE m.`membership_number` = p.`membership_number` GROUP BY m.`full_names`;
Ausführen des obigen Beispiels in MySQL Workbench liefert uns folgende Ergebnisse.
Die Abfrage verknüpft die beiden Tabellen in der WHERE-Klausel – der älteren Komma-Verknüpfung. Moderner Code formuliert dieselbe Logik als explizite Verknüpfung. INNER JOIN … ONBeachten Sie außerdem, dass jede nicht aggregierte Spalte in der SELECT-Liste in GROUP BY enthalten sein muss. MySQL 5.7 und spätere Versionen lehnen die Abfrage unter ONLY_FULL_GROUP_BY ab. Siehe die offiziell MySQL Referenz auf die Aggregatfunktion.


