SQL GROUP BY och HAR klausul med exempel

Innehållsförteckning:

Anonim

Vad är SQL Group by Clause?

GROUP BY-satsen är ett SQL-kommando som används för att gruppera rader som har samma värden . GROUP BY-satsen används i SELECT-satsen. Valfritt används den tillsammans med aggregerade funktioner för att producera sammanfattande rapporter från databasen.

Det är vad den gör, sammanfattar data från databasen.

Frågorna som innehåller GROUP BY-satsen kallas grupperade frågor och returnerar bara en enda rad för varje grupperat objekt.

SQL GROUP BY Syntax

Nu när vi vet vad SQL GROUP BY-satsen är, låt oss titta på syntaxen för en basgrupp efter fråga.

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

HÄR

  • "SELECT-uttalanden ..." är standard SQL SELECT-kommandofrågan.
  • " GROUP BY column_name1" är den klausul som utför grupperingen baserat på column_name1.
  • "[, column_name2,…]" är valfritt; representerar andra kolumnnamn när grupperingen görs i mer än en kolumn.
  • "[HAVING condition]" är valfritt; den används för att begränsa de rader som påverkas av GROUP BY-klausulen. Det liknar WHERE-klausulen.

Gruppera med en enda kolumn

För att hjälpa till att förstå effekten av SQL Group By-satsen, låt oss utföra en enkel fråga som returnerar alla könsposter från medlemstabellen.

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

Antag att vi vill få de unika värdena för kön. Vi kan använda följande fråga -

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

Att utföra ovanstående skript i MySQL-arbetsbänken mot Myflixdb ger oss följande resultat.

 
gender
Female
Male

Observera att endast två resultat har returnerats. Det beror på att vi bara har två könstyper man och kvinna. GROUP BY-klausulen i SQL grupperade alla "Manliga" medlemmar tillsammans och returnerade bara en enda rad för den. Det gjorde samma sak med "kvinnliga" medlemmar.

Gruppering med flera kolumner

Antag att vi vill få en lista över filmkategori-id och motsvarande år då de släpptes.

Låt oss följa resultatet av denna enkla fråga

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

Ovanstående resultat har många dubbletter.

Låt oss utföra samma fråga med hjälp av group by i SQL -

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

Att utföra ovanstående skript i MySQL-arbetsbänken mot myflixdb ger oss följande resultat som visas nedan.

 
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 fungerar på både kategori-id och år som släpptes för att identifiera unika rader i vårt ovanstående exempel.

Om kategori-id är detsamma men året som släpps är annorlunda behandlas en rad som en unik. Om kategori-id och utgivningsår är detsamma för mer än en rad, anses det vara en duplikat och endast en rad visas.

Gruppering och aggregerade funktioner

Antag att vi vill ha totalt antal män och kvinnor i vår databas. Vi kan använda följande skript som visas nedan för att göra det.

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

Att köra ovanstående skript i MySQL-arbetsbänken mot myflixdb ger oss följande resultat.

 
gender COUNT('membership_number')
Female 3
Male 5

Resultaten som visas nedan grupperas efter varje unikt könsvärde som läggs upp och antalet grupperade rader räknas med funktionen ANTAL aggregering.

Begränsa sökresultat med HAVING- klausulen

Det är inte alltid vi vill utföra grupperingar av all data i en given tabell. Det kommer att finnas tillfällen då vi vill begränsa våra resultat till vissa givna kriterier. I sådana fall kan vi använda HAVING-klausulen

Antag att vi vill veta alla utgivningsår för filmkategori id 8. Vi skulle använda följande manus för att uppnå våra resultat.

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

Att utföra ovanstående skript i MySQL-arbetsbänken mot Myflixdb ger oss följande resultat som visas nedan.

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

Observera att endast filmer med kategori id 8 har påverkats av vår GROUP BY-klausul.

Sammanfattning

  • GROUP BY-klausul SQL används för att gruppera rader med samma värden.
  • GROUP BY-klausulen används tillsammans med SQL SELECT-satsen.
  • SELECT-satsen som används i GROUP BY-satsen kan endast användas innehåller kolumnnamn, aggregerade funktioner, konstanter och uttryck.
  • SQL Having-klausul används för att begränsa resultaten som returneras av GROUP BY-klausulen.
  • MYSQL GROUP BY-klausul används för att samla in data från flera poster och returnerade poster med en eller flera kolumner.