Problem:
Du vill hitta grupper av rader med ett specifikt antal poster i en grupp.
Exempel:
Vår databas har en tabell som heter product med data i följande kolumner:id , name och category .
| id | namn | kategori |
|---|---|---|
| 1 | soffa | möbler |
| 2 | handskar | kläder |
| 3 | T-shirt | kläder |
| 4 | stol | möbler |
| 5 | skrivbord | möbler |
| 6 | titta | elektronik |
| 7 | fåtölj | möbler |
| 8 | kjol | kläder |
| 9 | radiomottagare | elektronik |
Låt oss hitta produktkategorin med fler än två poster.
Lösning:
SELECT category, COUNT(id) FROM product GROUP BY category HAVING COUNT(id)>2;
Här är resultaten:
| kategori | räkna |
|---|---|
| möbler | 4 |
| kläder | 3 |
Diskussion:
För att filtrera poster enligt det givna antalet rader i gruppen, använd HAVING-satsen. Den filtrerar rader med en aggregatfunktion som COUNT. Använd först i SELECT namnet på en kolumn eller kolumner för att gruppera rader (detta är en kategori i vårt exempel), placera sedan den aggregerade funktionen COUNT, som motsvarar antalet poster i varje grupp. För att räkna antalet rader, använd id-kolumnen som lagrar unika värden (i vårt exempel använder vi COUNT(id) ). Använd sedan GROUP BY-satsen för att gruppera poster enligt kolumner (GROUP BY kategori ovan). Efter att ha använt GROUP BY för att filtrera poster med aggregerade funktioner som COUNT, använd HAVING-satsen. Den används alltid efter GROUP BY-satsen. I HAVING använder vi ett villkor för att jämföra ett värde med ett som returneras av den aggregerade funktionen. I exemplet jämför vi om COUNT(id) returnerar ett värde högre än två. Om det är sant, returneras kategorin med produktantalet.