Articles

SQL GROUP BY en het hebben van clausule met voorbeelden

Wat is de SQL Group by clausule?

de groep by-clausule is een SQL-opdracht die wordt gebruikt om rijen met dezelfde waarden te groeperen. De groep op clausule wordt gebruikt in het SELECT statement. Optioneel wordt het gebruikt in combinatie met geaggregeerde functies om samenvattende rapporten uit de database te produceren.

dat is wat het doet, het samenvatten van gegevens uit de database.

De queries die de groep per clausule bevatten worden gegroepeerde queries 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 basic group by query.

SELECT statements... GROUP BY column_name1 ;

hier

  • ” SELECT statements…”is de standaard SQL SELECT command query.
  • “groeperen op kolom_name1” is de clausule die de groepering uitvoert op basis van kolom_name1.
  • “” is optioneel; vertegenwoordigt andere kolomnamen wanneer de groepering op meer dan één kolom wordt gedaan.
  • “” is optioneel; het wordt gebruikt om de rijen waarop de clausule groep per betrekking heeft, te beperken., Het is vergelijkbaar met de WHERE-clausule.

groeperen met behulp van een enkele kolom

om het effect van SQL Group By-clausule te begrijpen, laten we een eenvoudige query uitvoeren die alle gender-items 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 query 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


Opmerking Er zijn slechts twee resultaten geretourneerd. Dit komt omdat we slechts twee geslachtstypes man en vrouw hebben. De groep per clausule in SQL groepeerde alle “mannelijke” leden samen en gaf er slechts een enkele rij voor terug. Het deed hetzelfde met de “vrouwelijke” leden.

groeperen met behulp van meerdere kolommen

stel dat we een lijst willen van film category_id en bijbehorende jaren waarin ze zijn uitgebracht.,

Let ‘ s observe the output of this simple query

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 behulp van 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 hieronder.

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 groep door clausule werkt op zowel de categorie id en jaar vrijgegeven om unieke rijen te identificeren in ons bovenstaande voorbeeld.,

als de categorie-id hetzelfde is, maar het vrijgegeven jaar anders is, wordt een Rij behandeld als een unieke .Als de categorie-id en het vrijgegeven jaar hetzelfde zijn voor meer dan één rij, wordt het beschouwd als een duplicaat en wordt slechts één rij weergegeven.

groepering en aggregatie functies

stel dat we het totale aantal mannen en vrouwen in onze database willen. We kunnen het volgende script hieronder te 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 onderstaande resultaten worden gegroepeerd op basis van elke geplaatste unieke gender-waarde en het aantal gegroepeerde rijen wordt geteld met behulp van de Count aggregate-functie.

het beperken van query resultaten met behulp van de hebben clausule

Het is niet altijd dat we groepen willen uitvoeren op alle gegevens in een bepaalde tabel. Er zullen momenten zijn waarop we onze resultaten willen beperken tot bepaalde criteria. In dergelijke gevallen kunnen we gebruik maken van de have-clausule

stel dat we alle releasejaren voor movie categorie 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 hieronder.

movie_id title director year_released category_id
9 Honey mooners John Schultz 2005 8
5 Daddy's Little Girls NULL 2007 8

Opmerking Alleen films met categorie id 8 zijn beïnvloed door onze groep door clausule.

samenvatting

  • de groep per Clausule SQL wordt gebruikt om rijen met dezelfde waarden te groeperen.
  • de groep per clausule wordt gebruikt samen met het SQL SELECT statement.,
  • het SELECT statement dat gebruikt wordt in de groep per clausule kan alleen gebruikt worden met kolomnamen, geaggregeerde functies, constanten en expressies.
  • sql met clausule wordt gebruikt om de resultaten die door de groep per clausule worden geretourneerd, te beperken.
  • MySQL GROUP BY Clause wordt gebruikt om gegevens te verzamelen van meerdere records en geretourneerde record ingesteld door een of meer kolommen.