MySQL Group by With Count-Funktion

Abdul Basit 15 Februar 2024
  1. GROUP BY-Syntax in MySQL
  2. GROUP BY und Aggregatfunktionen in MySQL
  3. GROUP BY- und HAVING-Klausel in MySQL
  4. GROUP BY Count() für mehrere Spalten in MySQL
MySQL Group by With Count-Funktion

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.

Bestelltabelle

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:

Bestellungen nach Datum

Beispiel 2: Unten ist ein weiteres Beispiel, um das Gesamtgehalt jedes Mitarbeiters zu ermitteln. Angenommen, wir verwenden die folgende Tabelle zum Abrufen der Ergebnisse.

Mitarbeitertabelle

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:

Gesamtgehaltsgruppe nach Namen ausgeben

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:

Ausgabenamen mit einem Gehalt von mehr als 44000

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.

Bestelltabelle

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.

Ausgabeauftrag nach Kunde nach Datum

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.