Wat is de SQL Group by-clausule?
De GROUP BY-component is een SQL-opdracht die wordt gebruikt om rijen met dezelfde waarden te groeperen . De GROUP BY-component wordt gebruikt in de SELECT-instructie. Optioneel wordt het gebruikt in combinatie met geaggregeerde functies om samenvattingsrapporten van de database te produceren.
Dat is wat het doet, gegevens uit de database samenvatten .
De query's die de GROUP BY-component bevatten, worden gegroepeerde query's genoemd en retourneren slechts één rij voor elk gegroepeerd item.
SQL GROUP BY Syntaxis
Nu we weten wat de SQL GROUP BY-clausule is, laten we eens kijken naar de syntaxis voor een basisgroep op query.
SELECT statements… GROUP BY column_name1[,column_name2,… ] [HAVING condition];
HIER
- "SELECT-instructies ..." is de standaard SQL SELECT-opdrachtquery.
-
- "[, column_name2,…]" is optioneel; vertegenwoordigt andere kolomnamen wanneer de groepering op meer dan één kolom wordt uitgevoerd.
- "[HAVING condition]" is optioneel; het wordt gebruikt om de rijen te beperken die worden beïnvloed door de GROUP BY-clausule. Het is vergelijkbaar met de WHERE-clausule.
Groeperen met een enkele kolom
Laten we, om het effect van de SQL Group By-clausule te helpen begrijpen, een eenvoudige query uitvoeren die alle geslachtsitems uit de ledentabel retourneert.
SELECT `gender` FROM `members` ;
gender |
---|
Female |
Female |
Male |
Female |
Male |
Male |
Male |
Male |
Male |
Stel dat we de unieke waarden voor geslachten willen krijgen. We kunnen een volgende vraag gebruiken -
SELECT `gender` FROM `members` GROUP BY `gender`;
Het uitvoeren van het bovenstaande script in MySQL-workbench tegen de Myflixdb geeft ons de volgende resultaten.
gender |
---|
Female |
Male |
Merk op dat er slechts twee resultaten zijn geretourneerd. Dit komt omdat we slechts twee geslachtstypen hebben, Man en Vrouw. De GROUP BY-component in SQL groepeerde alle "Male" -leden samen en retourneerde er slechts één rij voor. Het deed hetzelfde met de "vrouwelijke" leden.
Groeperen met behulp van meerdere kolommen
Stel dat we een lijst willen krijgen met film category_id en de bijbehorende jaren waarin ze zijn uitgebracht.
Laten we eens kijken naar de uitvoer van deze eenvoudige vraag
SELECT `category_id`,`year_released` FROM `movies` ;
category_id | year_released |
---|---|
1 | 2011 |
2 | 2008 |
NULL | 2008 |
NULL | 2010 |
8 | 2007 |
6 | 2007 |
6 | 2007 |
8 | 2005 |
NULL | 2012 |
7 | 1920 |
8 | NULL |
8 | 1920 |
Het bovenstaande resultaat heeft veel duplicaten.
Laten we dezelfde query uitvoeren met group by in SQL -
SELECT `category_id`,`year_released` FROM `movies` GROUP BY `category_id`,`year_released`;
Het uitvoeren van het bovenstaande script in MySQL-workbench tegen de myflixdb geeft ons de volgende resultaten die hieronder worden weergegeven.
category_id | year_released |
---|---|
NULL | 2008 |
NULL | 2010 |
NULL | 2012 |
1 | 2011 |
2 | 2008 |
6 | 2007 |
7 | 1920 |
8 | 1920 |
8 | 2005 |
8 | 2007 |
De GROUP BY-clausule werkt op zowel de categorie-id als het vrijgegeven jaar om unieke rijen in ons bovenstaande voorbeeld te identificeren .
Als de categorie-id hetzelfde is maar het vrijgegeven jaar anders, dan wordt een rij als uniek behandeld. Als de categorie-id en het vrijgegeven jaar hetzelfde zijn voor meer dan één rij, wordt deze beschouwd als een duplicaat en slechts één rij wordt getoond.
Functies groeperen en aggregeren
Stel dat we het totale aantal mannen en vrouwen in onze database willen hebben. We kunnen het volgende onderstaande script gebruiken om dat te doen.
SELECT `gender`,COUNT(`membership_number`) FROM `members` GROUP BY `gender`;
Het uitvoeren van het bovenstaande script in MySQL-workbench tegen de myflixdb geeft ons de volgende resultaten.
gender | COUNT('membership_number') |
---|---|
Female | 3 |
Male | 5 |
De resultaten die hieronder worden weergegeven, zijn gegroepeerd op elke unieke geslachtswaarde die is gepost en het aantal gegroepeerde rijen wordt geteld met behulp van de geaggregeerde functie COUNT.
Queryresultaten beperken met behulp van de HAVING- clausule
Het is niet altijd zo dat we groeperingen willen uitvoeren op alle gegevens in een bepaalde tabel. Er zullen momenten zijn dat we onze resultaten willen beperken tot een bepaald criterium. In dergelijke gevallen kunnen we de HAVING-clausule gebruiken
Stel dat we alle jaren van uitgave van filmcategorie id 8 willen weten. We zouden het volgende script gebruiken om onze resultaten te bereiken.
SELECT * FROM `movies` GROUP BY `category_id`,`year_released` HAVING `category_id` = 8;
Het uitvoeren van het bovenstaande script in MySQL-workbench tegen de Myflixdb geeft ons de volgende resultaten die hieronder worden weergegeven.
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
9 | Honey mooners | John Schultz | 2005 | 8 |
5 | Daddy's Little Girls | NULL | 2007 | 8 |
Let op: alleen films met categorie-ID 8 vallen onder onze GROUP BY-clausule.
Overzicht
- De GROUP BY-clausule SQL wordt gebruikt om rijen met dezelfde waarden te groeperen.
- De GROUP BY-clausule wordt samen met de SQL SELECT-instructie gebruikt.
- De SELECT-instructie die in de GROUP BY-clausule wordt gebruikt, kan alleen worden gebruikt om kolomnamen, geaggregeerde functies, constanten en uitdrukkingen te bevatten.
- SQL Having-clausule wordt gebruikt om de resultaten te beperken die worden geretourneerd door de GROUP BY-clausule.
- MYSQL GROUP BY-clausule wordt gebruikt om gegevens te verzamelen uit meerdere records en geretourneerde records die zijn ingesteld op een of meer kolommen.