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 FROM
WHERE
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