Database
 sql >> Datenbank >  >> RDS >> Database

So filtern Sie Datensätze mit der Aggregatfunktion COUNT

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.