Zusammenfassung: In diesem Tutorial lernen Sie, wie Sie die MySQL HAVING-Klausel verwenden, um eine Filterbedingung für Gruppen von Zeilen oder Aggregaten anzugeben.
Einführung in die MySQL HAVING-Klausel
Die HAVING-Klausel wird in der SELECT-Anweisung verwendet, um Filterbedingungen für eine Gruppe von Zeilen oder Aggregaten anzugeben.
Die HAVING-Klausel wird oft zusammen mit der GROUP BY-Klausel verwendet, um Gruppen anhand einer bestimmten Bedingung zu filtern. Wenn die GROUP BY Klausel weggelassen wird, verhält sich die HAVING Klausel wie die WHERE Klausel.
Im Folgenden wird die Syntax der HAVING-Klausel erläutert:
Code language: SQL (Structured Query Language) (sql)SELECT select_listFROM table_nameWHERE search_conditionGROUP BY group_by_expressionHAVING group_condition;
In dieser Syntax geben Sie in der HAVING-Klausel eine Bedingung an. Wenn eine Zeile, die durch die group by-Klausel erzeugt wird, dazu führt, dass die group_condition-Klausel als wahr ausgewertet wird, wird die Abfrage sie in die Ergebnismenge aufnehmen.
Beachten Sie, dass die HAVING-Klausel eine Filterbedingung auf jede Gruppe von Zeilen anwendet, während die WHERE-Klausel die Filterbedingung auf jede einzelne Zeile anwendet.
MySQL wertet die HAVING-Klausel nach der FROMWHERE aus, SELECT und GROUP BY Klauseln und vor ORDER BY und LIMIT Klauseln.
HAVING vor der SELECT Klausel und nach der GROUP BY Klausel ausgewertet wird.MySQL HAVING-Klausel Beispiele
Lassen Sie uns einige Beispiele zur Verwendung der HAVING-Klausel nehmen, um zu sehen, wie sie funktioniert. Für die Demonstration verwenden wir die Tabelle orderdetails in der Beispieldatenbank.
Im Folgenden wird die GROUP BY-Klausel verwendet, um Bestellnummern zu erhalten, die Anzahl der verkauften Artikel pro Bestellung und den Gesamtumsatz für jeden aus der Tabelle orderdetails:
Code language: SQL (Structured Query Language) (sql)SELECT ordernumber, SUM(quantityOrdered) AS itemsCount, SUM(priceeach*quantityOrdered) AS totalFROM orderdetailsGROUP BY ordernumber;
Ausprobieren
Nun, können Sie herausfinden, welcher Auftrag einen Gesamtumsatz größer als 1000 hat, indem Sie die HAVING-Klausel wie folgt verwenden:
Code language: SQL (Structured Query Language) (sql)SELECT ordernumber, SUM(quantityOrdered) AS itemsCount, SUM(priceeach*quantityOrdered) AS totalFROM orderdetailsGROUP BY ordernumberHAVING total > 1000;
Ausprobieren
Sie können eine komplexe Bedingung in der HAVING-Klausel mit logischen Operatoren wie OR und AND.
Das folgende Beispiel verwendet die HAVING-Klausel, um Bestellungen zu finden, deren Gesamtbetrag größer als 1000 ist und die mehr als 600 Artikel enthalten:
Code language: SQL (Structured Query Language) (sql)SELECT ordernumber, SUM(quantityOrdered) AS itemsCount, SUM(priceeach*quantityOrdered) AS totalFROM orderdetailsGROUP BY ordernumberHAVING total > 1000 AND itemsCount > 600;
Ausprobieren
Angenommen, Sie möchten alle Bestellungen finden, die sich im Versandstatus befinden und deren Gesamtbetrag größer als 1500 ist, können Sie die Tabelle orderdetails mit der Tabelle orders unter Verwendung der Klausel INNER JOIN verbinden und eine Bedingung auf die Spalte status und das Aggregat total anwenden, wie in der folgenden Abfrage gezeigt:
Code language: SQL (Structured Query Language) (sql)SELECT a.ordernumber, status, SUM(priceeach*quantityOrdered) totalFROM orderdetails aINNER JOIN orders b ON b.ordernumber = a.ordernumberGROUP BY ordernumber, statusHAVING status = 'Shipped' AND total > 1500;
Ausprobieren
Die HAVING-Klausel ist nur sinnvoll, wenn Sie sie zusammen mit der GROUP BY-Klausel verwenden, um die Ausgabe der HighLevel-Berichte. Beispielsweise können Sie die HAVING-Klausel verwenden, um Fragen zu beantworten, wie die Anzahl der Aufträge in diesem Monat, in diesem Quartal oder in diesem Jahr, deren Gesamtumsatz größer als 10.000 ist.
In diesem Lernprogramm haben Sie gelernt, wie Sie die MySQL HAVING-Klausel mit der GROUP BY-Klausel verwenden, um Filterbedingungen für Gruppen von Zeilen oder Aggregate anzugeben.
- War dieses Lernprogramm hilfreich?
- JaNein