MySQL
Gruppiere nach
Suche…
Syntax
- SELECT Ausdruck1, Ausdruck2, ... Ausdruck_n,
- aggregate_function (Ausdruck)
- FROM Tische
- [WO Bedingungen]
- GROUP BY Ausdruck1, Ausdruck2, ... Ausdruck_n;
Parameter
Parameter | EINZELHEITEN |
---|---|
expression1, expression2, ... expression_n | Die Ausdrücke, die nicht in einer Aggregatfunktion eingeschlossen sind und in der GROUP BY-Klausel enthalten sein müssen. |
aggregate_function | Eine Funktion wie SUMME, COUNT, MIN, MAX oder AVG. |
Tische | Die Tabellen, von denen Sie Datensätze abrufen möchten. In der FROM-Klausel muss mindestens eine Tabelle aufgeführt sein. |
WHERE Bedingungen | Wahlweise. Die Bedingungen, die erfüllt sein müssen, damit die Datensätze ausgewählt werden. |
Bemerkungen
Die MySQL GROUP BY-Klausel wird in einer SELECT-Anweisung verwendet, um Daten über mehrere Datensätze hinweg zu sammeln und die Ergebnisse nach einer oder mehreren Spalten zu gruppieren.
Sein Verhalten wird zum Teil durch den Wert der Variablen ONLY_FULL_GROUP_BY
bestimmt . Wenn dies aktiviert ist, geben SELECT
Anweisungen, die nach einer beliebigen Spalte gruppieren, die nicht in der Ausgabe enthalten ist, einen Fehler zurück. ( Dies ist der Standard ab 5.7.5 .) Sowohl das Setzen als auch das Nicht-Setzen dieser Variablen kann für naive Benutzer oder Benutzer, die an andere DBMS gewöhnt sind, Probleme verursachen.
GROUP BY US-Funktion verwenden
SELECT product, SUM(quantity) AS "Total quantity"
FROM order_details
GROUP BY product;
Gruppieren mit MIN-Funktion
Angenommen, eine Tabelle mit Angestellten, in der jede Zeile ein Angestellter ist, der einen name
, eine department
und ein salary
.
SELECT department, MIN(salary) AS "Lowest salary"
FROM employees
GROUP BY department;
Dies würde Ihnen sagen, welche Abteilung den Mitarbeiter mit dem niedrigsten Gehalt enthält und wie hoch dieses Gehalt ist. Den name
des Mitarbeiters mit dem niedrigsten Gehalt in jeder Abteilung herauszufinden, ist ein anderes Problem, das über den Rahmen dieses Beispiels hinausgeht. Siehe "Max. Gruppe".
GROUP BY COUNT-Funktion verwenden
SELECT department, COUNT(*) AS "Man_Power"
FROM employees
GROUP BY department;
GROUP BY mit HAVING
SELECT department, COUNT(*) AS "Man_Power"
FROM employees
GROUP BY department
HAVING COUNT(*) >= 10;
Die Verwendung von GROUP BY ... HAVING
zum Filtern von Aggregatsätzen entspricht der Verwendung von SELECT ... WHERE
zum Filtern einzelner Datensätze.
Man könnte auch HAVING Man_Power >= 10
sagen, da HAVING
"Aliase" versteht.
Gruppe Durch Verwendung von Group Concat
Group Concat wird in MySQL verwendet, um verkettete Werte von Ausdrücken mit mehr als einem Ergebnis pro Spalte abzurufen . Das bedeutet, dass für eine Spalte viele Zeilen ausgewählt werden müssen, z. B. Name(1):Score(*)
Name | Ergebnis |
---|---|
Adam | A + |
Adam | EIN- |
Adam | B |
Adam | C + |
Rechnung | D- |
John | EIN- |
SELECT Name, GROUP_CONCAT(Score ORDER BY Score desc SEPERATOR ' ') AS Grades
FROM Grade
GROUP BY Name
Ergebnisse:
+------+------------+
| Name | Grades |
+------+------------+
| Adam | C+ B A- A+ |
| Bill | D- |
| John | A- |
+------+------------+
GROUP BY mit AGGREGATE-Funktionen
Tabelle ORDERS
+---------+------------+----------+-------+--------+
| orderid | customerid | customer | total | items |
+---------+------------+----------+-------+--------+
| 1 | 1 | Bob | 1300 | 10 |
| 2 | 3 | Fred | 500 | 2 |
| 3 | 5 | Tess | 2500 | 8 |
| 4 | 1 | Bob | 300 | 6 |
| 5 | 2 | Carly | 800 | 3 |
| 6 | 2 | Carly | 1000 | 12 |
| 7 | 3 | Fred | 100 | 1 |
| 8 | 5 | Tess | 11500 | 50 |
| 9 | 4 | Jenny | 200 | 2 |
| 10 | 1 | Bob | 500 | 15 |
+---------+------------+----------+-------+--------+
- ANZAHL
Gibt die Anzahl der Zeilen zurück , die bestimmte Kriterien in der WHERE
Klausel erfüllen.
ZB: Anzahl der Bestellungen für jeden Kunden.
SELECT customer, COUNT(*) as orders
FROM orders
GROUP BY customer
ORDER BY customer
Ergebnis:
+----------+--------+
| customer | orders |
+----------+--------+
| Bob | 3 |
| Carly | 2 |
| Fred | 2 |
| Jenny | 1 |
| Tess | 2 |
+----------+--------+
- SUMME
Gibt die Summe der ausgewählten Spalte zurück.
ZB: Summe der Summe und der Artikel für jeden Kunden.
SELECT customer, SUM(total) as sum_total, SUM(items) as sum_items
FROM orders
GROUP BY customer
ORDER BY customer
Ergebnis:
+----------+-----------+-----------+
| customer | sum_total | sum_items |
+----------+-----------+-----------+
| Bob | 2100 | 31 |
| Carly | 1800 | 15 |
| Fred | 600 | 3 |
| Jenny | 200 | 2 |
| Tess | 14000 | 58 |
+----------+-----------+-----------+
- AVG
Gibt den Durchschnittswert einer Spalte mit numerischem Wert zurück.
ZB: Durchschnittlicher Bestellwert für jeden Kunden.
SELECT customer, AVG(total) as avg_total
FROM orders
GROUP BY customer
ORDER BY customer
Ergebnis:
+----------+-----------+
| customer | avg_total |
+----------+-----------+
| Bob | 700 |
| Carly | 900 |
| Fred | 300 |
| Jenny | 200 |
| Tess | 7000 |
+----------+-----------+
- MAX
Gibt den höchsten Wert einer bestimmten Spalte oder eines bestimmten Ausdrucks zurück.
ZB: Höchste Auftragssumme für jeden Kunden.
SELECT customer, MAX(total) as max_total
FROM orders
GROUP BY customer
ORDER BY customer
Ergebnis:
+----------+-----------+
| customer | max_total |
+----------+-----------+
| Bob | 1300 |
| Carly | 1000 |
| Fred | 500 |
| Jenny | 200 |
| Tess | 11500 |
+----------+-----------+
- MINDEST
Gibt den niedrigsten Wert einer bestimmten Spalte oder eines bestimmten Ausdrucks zurück.
ZB: Niedrigste Auftragssumme für jeden Kunden.
SELECT customer, MIN(total) as min_total
FROM orders
GROUP BY customer
ORDER BY customer
Ergebnis:
+----------+-----------+
| customer | min_total |
+----------+-----------+
| Bob | 300 |
| Carly | 800 |
| Fred | 100 |
| Jenny | 200 |
| Tess | 2500 |
+----------+-----------+