Articles

SQL GROUP BY și având Clauză cu exemple

care este clauza SQL Group by?

clauza grup după este o comandă SQL care este utilizată pentru a grupa rânduri care au aceleași valori. Clauza grup după este utilizată în instrucțiunea SELECT. Opțional, este utilizat împreună cu funcții agregate pentru a produce rapoarte de sinteză din Baza de date.

asta face, rezumând datele din Baza de date.

interogările care conțin clauza grup după sunt numite interogări grupate și returnează doar un singur rând pentru fiecare element grupat.,

SQL GROUP BY Syntax

acum că știm care este clauza SQL GROUP BY, Să analizăm sintaxa pentru un grup de bază după interogare.

SELECT statements... GROUP BY column_name1 ;

aici

  • „selectați declarații…”este interogarea standard de comandă SQL SELECT.
  • „GROUP BY column_name1” este clauza care efectuează gruparea bazată pe column_name1.
  • „” este opțională; reprezintă alte nume de coloane atunci când gruparea se face pe mai multe coloane.
  • „” este opțională; este utilizată pentru a restricționa rândurile afectate de clauza GROUP BY., Este similar cu clauza WHERE.

gruparea folosind o singură coloană

pentru a ajuta la înțelegerea efectului grupului SQL după clauză, să executăm o interogare simplă care returnează toate intrările de gen din tabelul membrilor.

SELECT `gender` FROM `members` ;


gender

Female


Female


Male


Female


Male


Male


Male


Male


Male


Să presupunem că dorim să obținem valorile unice pentru sexe. Putem folosi următoarea interogare –

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

Executa scriptul de mai sus în MySQL workbench împotriva Myflixdb ne oferă următoarele rezultate.,


gender

Female


Male


notă doar două rezultate au fost returnate. Acest lucru se datorează faptului că avem doar două tipuri de sex masculin și feminin. Clauza GROUP BY din SQL a grupat toți membrii „masculi” împreună și a returnat doar un singur rând pentru aceasta. A făcut același lucru cu membrii” feminini”.

gruparea folosind mai multe coloane

Să presupunem că dorim să obținem o listă de filme category_id și anii corespunzători în care au fost lansate.,

Să respecte ieșire din această interogare simplă

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

rezultatul De mai sus are mai multe duplicate.

Să execute aceeași interogare folosind group by în SQL –

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

Executa scriptul de mai sus în MySQL workbench împotriva myflixdb ne oferă următoarele rezultate afișate mai jos.

category_id year_released
NULL 2008
NULL 2010
NULL 2012
1 2011
2 2008
6 2007
7 1920
8 1920
8 2005
8 2007

clauza GROUP BY funcționează atât pe id-ul categoriei, cât și pe anul lansat pentru a identifica rânduri unice în exemplul nostru de mai sus.,

Dacă ID-ul categoriei este același, dar anul lansat este diferit, atunci un rând este tratat ca unul unic .Dacă ID-ul categoriei și Anul lansării sunt aceleași pentru mai mult de un rând, atunci este considerat duplicat și este afișat un singur rând.

funcții de grupare și agregate

Să presupunem că dorim numărul total de bărbați și femei în Baza noastră de date. Putem folosi următorul script prezentat mai jos pentru a face acest lucru.

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

Executa scriptul de mai sus în MySQL workbench împotriva myflixdb ne oferă următoarele rezultate.,

gender COUNT('membership_number')
Female 3
Male 5

rezultatele prezentate mai jos sunt grupate după fiecare valoare unică de gen afișată, iar numărul de rânduri grupate este numărat folosind funcția COUNT aggregate.

restricționarea rezultatelor interogării folosind clauza HAVING

nu este întotdeauna că vom dori să efectuăm grupări pe toate datele dintr-un tabel dat. Vor fi momente când vom dori să ne restricționăm rezultatele la anumite criterii date. În astfel de cazuri , putem folosi clauza HAVING

Să presupunem că vrem să cunoaștem toți anii de lansare pentru id-ul categoriei de filme 8., Ne-ar folosi următorul script pentru a obține rezultatele noastre.

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

Executa scriptul de mai sus în MySQL workbench împotriva Myflixdb ne oferă următoarele rezultate afișate mai jos.

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

Notă numai filmele cu categoria id 8 au fost afectate de grupul nostru de clauza.

rezumat

  • grupul după clauza SQL este utilizat pentru a grupa rânduri cu aceleași valori.
  • clauza grup după este utilizată împreună cu instrucțiunea SQL SELECT.,
  • instrucțiunea SELECT utilizată în clauza GROUP BY poate fi utilizată numai pentru a conține nume de coloane, funcții agregate, constante și expresii.
  • SQL având clauza este utilizat pentru a restricționa rezultatele returnate de grupul de clauza.
  • clauza MYSQL GROUP BY este utilizată pentru a colecta date din mai multe înregistrări și înregistrări returnate setate de una sau mai multe coloane.