MySQL Group by With Count-Funktion
-
GROUP BY
-Syntax in MySQL -
GROUP BY
und Aggregatfunktionen in MySQL -
GROUP BY
- undHAVING
-Klausel in MySQL -
GROUP BY Count()
für mehrere Spalten in MySQL
In diesem Tutorial wird die SQL-Klausel GROUP BY
in Verbindung mit den Aggregatfunktionen unter Verwendung von MySQL behandelt.
Die Klausel GROUP BY
wird oft zusammen mit einigen Aggregatfunktionen wie COUNT()
, SUM()
, MIN()
, MAX()
und DURCHSCHNITT()
.
GROUP BY
-Syntax in MySQL
In MySQL wird die folgende Syntax zum Gruppieren der resultierenden Ansicht nach einigen Spaltennamen verwendet.
SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s);
GROUP BY
und Aggregatfunktionen in MySQL
In SQL kann die Klausel GROUP BY
mit der Aggregatfunktion verwendet werden, um die Anzahl der Datensätze unter bestimmten Bedingungen zu zählen, zu summieren oder zu aggregieren.
Beispiel 1: Angenommen, wir haben eine ORDERS
-Tabelle und möchten die Anzahl der Bestellungen nach Bestelldatum gruppiert zählen.
Wir können dies erreichen, indem wir die folgende Abfrage verwenden.
SELECT COUNT(OrderID) as Count, OrderDate
FROM Orders
GROUP BY OrderDate;
Die obige Abfrage ruft alle Bestellungen ab, indem sie sie nach ihrem OrderDate
gruppiert und einen einzelnen Datensatz pro OrderDate
anzeigt. Daher enthält jeder Datensatz in der resultierenden Ansicht OrderDate
und die Anzahl aller OrderIDs
an diesem Datum.
Die Ausgabe der Abfrage soll wie folgt aussehen:
Beispiel 2: Unten ist ein weiteres Beispiel, um das Gesamtgehalt jedes Mitarbeiters zu ermitteln. Angenommen, wir verwenden die folgende Tabelle zum Abrufen der Ergebnisse.
SELECT e.NAME, SUM(e.SALARY)
FROM Employee e
GROUP BY e.NAME;
In der obigen Abfrage wählen wir zuerst alle NAME
aus der Tabelle aus und wenden dann die Funktion SUMME
an, um die Summe der Gehälter für jeden Namen zu berechnen. Daher sollte jedem Name
nur ein einziger Datensatz entsprechen.
Die Ausgabe der Abfrage sollte wie folgt aussehen:
GROUP BY
- und HAVING
-Klausel in MySQL
Die Klausel HAVING
kann in Verbindung mit der Klausel GROUP BY
verwendet werden, um die Ergebnisse basierend auf bestimmten Bedingungen weiter zu filtern, wie die folgende Abfrage zeigt.
SELECT e.NAME, SUM(e.SALARY)
FROM Employee e
GROUP BY e.NAME
HAVING SUM(SALARY)>44000;
Diese Abfrage ist die gleiche wie oben; Der einzige Unterschied besteht jedoch darin, dass wir die Klausel HAVING
angewendet haben, um das Gehalt weiter zu filtern und nur die Datensätze mit einer Endgehaltssumme von mehr als 44000 einzubeziehen.
Das Ergebnis dieser Abfrage sieht so aus:
GROUP BY Count()
für mehrere Spalten in MySQL
Die Aggregatfunktion COUNT()
kann zusammen mit der Klausel GROUP BY
mit mehreren Spalten verwendet werden. In diesem Fall werden die Ergebnisse zuerst nach der ersten Spalte gruppiert, dann nach der nächsten usw. für alle weiteren Spalten.
Danach werden alle Zeilen mit den gleichen gruppierten Werten gezählt und als eine angezeigt.
Angenommen, wir möchten die Bestellungen eines bestimmten Kunden an einem bestimmten Datum aus der folgenden Tabelle zählen.
Wir können dies tun, indem wir die folgende Abfrage verwenden.
Select CustomerId, OrderDate, COUNT(OrderId) as OrdersByCustomerByDate
FROM ORDERS
GROUP BY CustomerId, OrderDate;
Alle Bestellungen werden zuerst nach CustomerId
und dann nach OrderDate
gruppiert. Danach werden alle Datensätze, bei denen CustomerID
und OrderDate
identisch sind, gezählt und als ein einziger Datensatz angezeigt, wie im folgenden Abfrageergebnis dargestellt.
Der Kunde mit $CustomerId = 1$
hat drei Bestellungen: eine am 30.07.2022
und zwei am Datum 31.07.2022
.
Alle zwei Bestellungen dieses Kunden für den 31. Juli 2022
werden in der zweiten Zeile des Abfrageergebnisses mit $OrdersByCustomerByDate = 2$
aggregiert. Gleiches gilt für die restlichen Aufzeichnungen.