SQL GROUP BY og HAR Klausul med eksempler

Innholdsfortegnelse:

Anonim

Hva er SQL Group by Clause?

GROUP BY-setningen er en SQL-kommando som brukes til å gruppere rader som har samme verdier . GROUP BY-setningen brukes i SELECT-setningen. Alternativt brukes den sammen med samlede funksjoner for å produsere sammendragsrapporter fra databasen.

Det er det den gjør, oppsummerer data fra databasen.

Spørringene som inneholder GROUP BY-setningen kalles grupperte spørringer og returnerer bare en enkelt rad for hvert grupperte element.

SQL GROUP BY Syntaks

Nå som vi vet hva SQL GROUP BY-setningen er, la oss se på syntaksen for en grunnleggende gruppe etter spørsmål.

SELECT statements… GROUP BY column_name1[,column_name2,… ] [HAVING condition];

HER

  • "SELECT setninger ..." er standard SQL SELECT kommandospørring.
  • " GROUP BY column_name1" er leddet som utfører grupperingen basert på column_name1.
  • "[, kolonnenavn2, ...]" er valgfritt; representerer andre kolonnenavn når grupperingen er gjort på mer enn en kolonne.
  • "[HAVING condition]" er valgfritt; den brukes til å begrense radene som er berørt av GROUP BY-setningen. Det ligner på WHERE-klausulen.

Gruppering ved hjelp av en enkelt kolonne

For å hjelpe deg med å forstå effekten av SQL Group By-ledd, la oss utføre et enkelt spørsmål som returnerer alle kjønnoppføringene fra medlemstabellen.

SELECT `gender` FROM `members` ;
 
gender
Female
Female
Male
Female
Male
Male
Male
Male
Male

Anta at vi ønsker å få de unike verdiene for kjønn. Vi kan bruke følgende spørsmål -

SELECT `gender` FROM `members` GROUP BY `gender`;

Å utføre ovennevnte skript i MySQL arbeidsbenk mot Myflixdb gir oss følgende resultater.

 
gender
Female
Male

Merk at bare to resultater har blitt returnert. Dette er fordi vi bare har to kjønnstyper Mann og Kvinne. GROUP BY-setningen i SQL grupperte alle "Male" -medlemmene sammen og returnerte bare en enkelt rad for den. Det gjorde det samme med de "kvinnelige" medlemmene.

Gruppering ved hjelp av flere kolonner

Anta at vi ønsker å få en liste over filmkategori_id og tilsvarende år de ble utgitt i.

La oss observere resultatet av denne enkle spørringen

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

Ovennevnte resultat har mange duplikater.

La oss utføre den samme spørringen ved hjelp av group by i SQL -

SELECT `category_id`,`year_released` FROM `movies` GROUP BY `category_id`,`year_released`;

Å utføre skriptet ovenfor i MySQL arbeidsbenk mot myflixdb gir oss 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 opererer både på kategorien id og utgitt år for å identifisere unike rader i eksemplet vårt ovenfor.

Hvis kategorien ID er den samme, men året som er utgitt er forskjellig, blir en rad behandlet som en unik. Hvis kategorien ID og året som er utgitt er det samme i mer enn en rad, blir det sett på som en duplikat og bare en rad er vist.

Gruppering og samlede funksjoner

Anta at vi vil ha totalt antall menn og kvinner i databasen vår. Vi kan bruke følgende skript vist nedenfor for å gjøre det.

SELECT `gender`,COUNT(`membership_number`) FROM `members` GROUP BY `gender`;

Å utføre skriptet ovenfor i MySQL arbeidsbenk mot myflixdb gir oss følgende resultater.

 
gender COUNT('membership_number')
Female 3
Male 5

Resultatene vist nedenfor er gruppert etter hver unike kjønnsverdi som er lagt ut, og antall grupperte rader telles ved hjelp av TELLER-aggregatfunksjonen.

Begrensning av søkeresultater ved å bruke HAVING- setningen

Det er ikke alltid vi ønsker å utføre grupperinger på alle dataene i en gitt tabell. Det vil være tider når vi vil begrense resultatene til et bestemt kriterium. I slike tilfeller kan vi bruke HAVING-klausulen

Anta at vi vil vite alle utgivelsesårene for filmkategori id 8. Vi bruker følgende manus for å oppnå våre resultater.

SELECT * FROM `movies` GROUP BY `category_id`,`year_released` HAVING `category_id` = 8;

Å utføre ovennevnte skript i MySQL arbeidsbenk mot Myflixdb gir oss 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

Merk at bare filmer med kategori id 8 har blitt påvirket av GROUP BY-klausulen.

Sammendrag

  • GROUP BY-klausul SQL brukes til å gruppere rader med samme verdier.
  • GROUP BY-klausulen brukes sammen med SQL SELECT-setningen.
  • SELECT-setningen som brukes i GROUP BY-setningen kan bare brukes inneholder kolonnenavn, samlede funksjoner, konstanter og uttrykk.
  • SQL Having-klausul brukes til å begrense resultatene som returneres av GROUP BY-setningen.
  • MYSQL GROUP BY-klausul brukes til å samle inn data fra flere poster og returnerte poster satt av en eller flere kolonner.