Hvad er SQL Group by Clause?
GROUP BY-klausulen er en SQL-kommando, der bruges til at gruppere rækker, der har de samme værdier . GROUP BY-klausulen bruges i SELECT-sætningen. Valgfrit bruges det sammen med samlede funktioner til at producere oversigtsrapporter fra databasen.
Det er, hvad det gør, opsummerer data fra databasen.
Forespørgsler, der indeholder GROUP BY-klausulen kaldes grupperede forespørgsler og returnerer kun en enkelt række for hvert grupperet element.
SQL GROUP BY Syntaks
Nu hvor vi ved, hvad SQL GROUP BY-klausulen er, lad os se på syntaksen for en grundlæggende gruppe efter forespørgsel.
SELECT statements… GROUP BY column_name1[,column_name2,… ] [HAVING condition];
HER
- "SELECT-sætninger ..." er standard SQL SELECT-kommandoforespørgsel.
- " GROUP BY column_name1" er den klausul, der udfører grupperingen baseret på column_name1.
- "[, kolonnenavn2, ...]" er valgfri; repræsenterer andre kolonnenavne, når grupperingen udføres i mere end en kolonne.
- "[HAVING condition]" er valgfri; det bruges til at begrænse de rækker, der er berørt af GROUP BY-klausulen. Det svarer til WHERE-klausulen.
Gruppering ved hjælp af en enkelt kolonne
For at hjælpe med at forstå effekten af SQL Group By-klausul, lad os udføre en simpel forespørgsel, der returnerer alle kønsposter fra medlemstabellen.
SELECT `gender` FROM `members` ;
gender |
---|
Female |
Female |
Male |
Female |
Male |
Male |
Male |
Male |
Male |
Antag, at vi ønsker at få de unikke værdier for køn. Vi kan bruge følgende forespørgsel -
SELECT `gender` FROM `members` GROUP BY `gender`;
At udføre ovenstående script i MySQL-arbejdsbænken mod Myflixdb giver os følgende resultater.
gender |
---|
Female |
Male |
Bemærk, at kun to resultater er returneret. Dette skyldes, at vi kun har to kønstyper Mand og Kvinde. GROUP BY-klausulen i SQL grupperede alle "mandlige" medlemmer sammen og returnerede kun en enkelt række til den. Det gjorde det samme med de "kvindelige" medlemmer.
Gruppering ved hjælp af flere kolonner
Antag, at vi ønsker at få en liste over filmkategori_id og tilsvarende år, hvor de blev frigivet.
Lad os observere output fra denne enkle forespørgsel
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 |
Ovenstående resultat har mange dubletter.
Lad os udføre den samme forespørgsel ved hjælp af group by i SQL -
SELECT `category_id`,`year_released` FROM `movies` GROUP BY `category_id`,`year_released`;
Udførelse af ovenstående script i MySQL workbench mod myflixdb giver os følgende resultater vist nedenfor.
category_id | year_released |
---|---|
NULL | 2008 |
NULL | 2010 |
NULL | 2012 |
1 | 2011 |
2 | 2008 |
6 | 2007 |
7 | 1920 |
8 | 1920 |
8 | 2005 |
8 | 2007 |
GROUP BY-klausulen fungerer på både kategori-id og frigivet år for at identificere unikke rækker i vores ovenstående eksempel.
Hvis kategori-id'et er det samme, men det frigivne år er forskelligt, behandles en række som en unik. Hvis kategori-id'et og det frigivne år er det samme i mere end en række, betragtes det som en duplikat og kun en række er vist.
Gruppering og samlede funktioner
Antag, at vi vil have det samlede antal mænd og kvinder i vores database. Vi kan bruge følgende script vist nedenfor til at gøre det.
SELECT `gender`,COUNT(`membership_number`) FROM `members` GROUP BY `gender`;
At udføre ovenstående script i MySQL-arbejdsbænk mod myflixdb giver os følgende resultater.
gender | COUNT('membership_number') |
---|---|
Female | 3 |
Male | 5 |
Resultaterne vist nedenfor er grupperet efter hver unikke kønsværdi, der bogføres, og antallet af grupperede rækker tælles ved hjælp af den samlede funktion COUNT.
Begrænsning af forespørgselsresultater ved hjælp af HAVING- klausulen
Det er ikke altid, at vi ønsker at udføre grupperinger på alle data i en given tabel. Der vil være tidspunkter, hvor vi vil begrænse vores resultater til bestemte givne kriterier. I sådanne tilfælde kan vi bruge HAVING-klausulen
Antag, at vi vil vide alle udgivelsesår for filmkategori id 8. Vi bruger følgende script til at opnå vores resultater.
SELECT * FROM `movies` GROUP BY `category_id`,`year_released` HAVING `category_id` = 8;
Udførelse af ovenstående script i MySQL-arbejdsbænk mod Myflixdb giver os følgende resultater vist nedenfor.
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
9 | Honey mooners | John Schultz | 2005 | 8 |
5 | Daddy's Little Girls | NULL | 2007 | 8 |
Bemærk, at kun film med kategori id 8 er blevet påvirket af vores GROUP BY-klausul.
Resumé
- GROUP BY-klausul SQL bruges til at gruppere rækker med samme værdier.
- GROUP BY-klausulen bruges sammen med SQL SELECT-sætningen.
- SELECT-sætningen, der bruges i GROUP BY-klausulen, kan kun bruges indeholde kolonnenavne, samlede funktioner, konstanter og udtryk.
- SQL Having-klausul bruges til at begrænse de resultater, der returneres af GROUP BY-klausulen.
- MYSQL GROUP BY-klausul bruges til at indsamle data fra flere poster og returnerede poster, der er indstillet af en eller flere kolonner.