sql >> Database >  >> RDS >> Database

Hoe records te filteren met de geaggregeerde functie COUNT

Probleem:

U wilt groepen rijen zoeken met een specifiek aantal items in een groep.

Voorbeeld:

Onze database heeft een tabel met de naam product met gegevens in de volgende kolommen:id , name en category .

id naam categorie
1 bank meubels
2 handschoenen kleding
3 T-shirt kleding
4 stoel meubels
5 bureau meubels
6 kijken elektronica
7 fauteuil meubels
8 rok kleding
9 radio-ontvanger elektronica

Laten we de categorie producten zoeken met meer dan twee vermeldingen.

Oplossing:

SELECT category, COUNT(id)
FROM product
GROUP BY category
HAVING COUNT(id)>2;

Dit zijn de resultaten:

categorie tel
meubels 4
kleding 3

Discussie:

Gebruik de HAVING-component om records te filteren op het opgegeven aantal rijen in de groep. Het filtert rijen met behulp van een conditie-aggregatiefunctie zoals AANTAL. Gebruik eerst in SELECT de naam van een kolom of kolommen om rijen te groeperen (dit is een categorie in ons voorbeeld) en plaats vervolgens de aggregatiefunctie COUNT, die het aantal records in elke groep optelt. Om het aantal rijen te tellen, gebruikt u de id-kolom waarin unieke waarden zijn opgeslagen (in ons voorbeeld gebruiken we COUNT(id) ). Gebruik vervolgens de GROUP BY-component om records te groeperen volgens kolommen (de GROUP BY categorie hierboven). Nadat u GROUP BY hebt gebruikt om records te filteren met aggregatiefuncties zoals COUNT, gebruikt u de HAVING-component. Het wordt altijd gebruikt na de GROUP BY-clausule. In HAVING gebruiken we een voorwaarde om een ​​waarde te vergelijken met een waarde die wordt geretourneerd door de aggregatiefunctie. In het voorbeeld vergelijken we of COUNT(id) een waarde hoger dan twee retourneert. Indien waar, wordt de categorie geretourneerd met het aantal producten.


  1. SQL-fout:ORA-02000:ontbreekt ALTIJD trefwoord bij het maken van een op identiteitskolom gebaseerde tabel

  2. Informatiesystemen, gegevens en informatie

  3. SQL Server:converteer ((int)jaar,(int)maand,(int)dag) naar Datumtijd

  4. Opdrachten lopen niet synchroon; je kunt deze opdracht nu niet uitvoeren