sql >> Database teknologi >  >> RDS >> Database

Sådan filtreres poster med samlet funktion COUNT

Problem:

Du vil finde grupper af rækker med et bestemt antal poster i en gruppe.

Eksempel:

Vores database har en tabel med navnet product med data i følgende kolonner:id , name og category .

id navn kategori
1 sofa møbler
2 handsker tøj
3 T-shirt tøj
4 stol møbler
5 skrivebord møbler
6 se elektronik
7 lænestol møbler
8 nederdel tøj
9 radiomodtager elektronik

Lad os finde kategorien af ​​produkter med mere end to poster.

Løsning:

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

Her er resultaterne:

kategori tæller
møbler 4
tøj 3

Diskussion:

For at filtrere poster i henhold til det givne antal rækker i gruppen, skal du bruge HAVING-udtrykket. Det filtrerer rækker ved hjælp af en tilstandsaggregatfunktion som COUNT. Først i SELECT skal du bruge navnet på en kolonne eller kolonner til at gruppere rækker (dette er en kategori i vores eksempel), og derefter placere den aggregerede funktion COUNT, som stemmer overens med antallet af poster i hver gruppe. For at tælle antallet af rækker, brug id-kolonnen, som gemmer unikke værdier (i vores eksempel bruger vi COUNT(id) ). Brug derefter GROUP BY-sætningen til at gruppere poster i henhold til kolonner (GROUP BY kategori ovenfor). Efter at have brugt GROUP BY til at filtrere poster med aggregerede funktioner som COUNT, skal du bruge HAVING-udtrykket. Det bruges altid efter GROUP BY-klausulen. I HAVING bruger vi en betingelse til at sammenligne en værdi med en, der returneres af den aggregerede funktion. I eksemplet sammenligner vi om COUNT(id) returnerer en værdi højere end to. Hvis det er sandt, returneres kategorien med produktantallet.


  1. Hvad er den mest anbefalede måde at gemme tid i PostgreSQL ved hjælp af Java?

  2. Hold orden fra 'IN'-klausulen

  3. Oracle til PostgreSQL:START MED / FORBIND VED

  4. Slut på support for SQL Server 2008 &2008 R2