Problem:
Sie möchten Gruppen von Zeilen mit einer bestimmten Anzahl von Einträgen in einer Gruppe finden.
Beispiel:
Unsere Datenbank hat eine Tabelle namens product
mit Daten in den folgenden Spalten:id
, name
und category
.
id | Name | Kategorie |
---|---|---|
1 | Sofa | Möbel |
2 | Handschuhe | Kleidung |
3 | T-Shirt | Kleidung |
4 | Vorsitz | Möbel |
5 | Schreibtisch | Möbel |
6 | ansehen | Elektronik |
7 | Sessel | Möbel |
8 | Rock | Kleidung |
9 | Funkempfänger | Elektronik |
Suchen wir die Produktkategorie mit mehr als zwei Einträgen.
Lösung:
SELECT category, COUNT(id) FROM product GROUP BY category HAVING COUNT(id)>2;
Hier sind die Ergebnisse:
Kategorie | zählen |
---|---|
Möbel | 4 |
Kleidung | 3 |
Diskussion:
Verwenden Sie die HAVING-Klausel, um Datensätze nach der angegebenen Anzahl von Zeilen in der Gruppe zu filtern. Es filtert Zeilen mithilfe einer Bedingungsaggregationsfunktion wie COUNT. Verwenden Sie zuerst in SELECT den Namen einer oder mehrerer Spalten, um Zeilen zu gruppieren (in unserem Beispiel ist dies eine Kategorie), und platzieren Sie dann die Aggregatfunktion COUNT, die die Anzahl der Datensätze in jeder Gruppe zählt. Um die Anzahl der Zeilen zu zählen, verwenden Sie die ID-Spalte, die eindeutige Werte speichert (in unserem Beispiel verwenden wir COUNT(id)
). Verwenden Sie als Nächstes die GROUP BY-Klausel, um Datensätze nach Spalten zu gruppieren (die GROUP BY
Kategorie oben). Nachdem Sie GROUP BY zum Filtern von Datensätzen mit Aggregatfunktionen wie COUNT verwendet haben, verwenden Sie die HAVING-Klausel. Es wird immer nach der GROUP BY-Klausel verwendet. In HAVING verwenden wir eine Bedingung, um einen Wert mit einem Wert zu vergleichen, der von der Aggregatfunktion zurückgegeben wird. Im Beispiel vergleichen wir, ob COUNT(id) einen Wert größer als zwei zurückgibt. Wenn wahr, wird die Kategorie mit der Produktanzahl zurückgegeben.