Ce este SQL Group by Clause?
Clauza GROUP BY este o comandă SQL care este utilizată pentru a grupa rândurile care au aceleași valori . Clauza GROUP BY este utilizată în instrucțiunea SELECT. Opțional, este utilizat împreună cu funcții agregate pentru a produce rapoarte sumare din baza de date.
Asta face, rezumând datele din baza de date.
Interogările care conțin clauza GROUP BY se numesc interogări grupate și returnează doar un singur rând pentru fiecare element grupat.
SQL GROUP BY Sintaxă
Acum, că știm care este clauza SQL GROUP BY, să analizăm sintaxa unui grup de bază prin interogare.
SELECT statements… GROUP BY column_name1[,column_name2,… ] [HAVING condition];
AICI
- "Instrucțiuni SELECT ..." este interogarea standard de comandă SQL SELECT.
- „ GROUP BY column_name1” este clauza care efectuează gruparea pe baza column_name1.
- „[, nume_coloană2,…]” este opțional; reprezintă alte nume de coloane când gruparea se face pe mai multe coloane.
- „[AVÂND condiția]” este opțional; este folosit pentru a restricționa rândurile afectate de clauza GROUP BY. Este similar cu clauza WHERE.
Gruparea utilizând o singură coloană
Pentru a ajuta la înțelegerea efectului clauzei SQL Group By, 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 valori unice pentru sexe. Putem folosi următoarea interogare -
SELECT `gender` FROM `members` GROUP BY `gender`;
Executarea scriptului de mai sus în MySQL workbench împotriva Myflixdb ne oferă următoarele rezultate.
gender |
---|
Female |
Male |
Rețineți că 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 „Male” și a returnat doar un singur rând pentru aceasta. A procedat la fel cu membrii „Femei”.
Gruparea utilizând mai multe coloane
Să presupunem că dorim să obținem o listă cu categoria_id a filmului și anii corespunzători în care au fost lansați.
Să observăm rezultatul acestei interogări simple
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 multe duplicate.
Să executăm aceeași interogare folosind grupul de în SQL -
SELECT `category_id`,`year_released` FROM `movies` GROUP BY `category_id`,`year_released`;
Executarea scriptului de mai sus în MySQL workbench împotriva myflixdb ne oferă următoarele rezultate prezentate 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 lansării este diferit, atunci un rând este tratat ca unul unic. Dacă ID-ul categoriei și anul lansat este același pentru mai multe rânduri, atunci este considerat un duplicat și doar un rând este arătat.
Funcții de grupare și agregare
Să presupunem că dorim un număr 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`;
Executarea scriptului 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 în funcție de fiecare valoare de gen unică postată, iar numărul de rânduri grupate este contorizat utilizând funcția agregată COUNT.
Restricționarea rezultatelor interogării folosind clauza HAVING
Nu întotdeauna vom dori să efectuăm grupări pe toate datele dintr-un tabel dat. Vor exista momente în care vom dori să ne restrângem 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 categoria de film ID 8. Am folosi următorul script pentru a obține rezultatele noastre.
SELECT * FROM `movies` GROUP BY `category_id`,`year_released` HAVING `category_id` = 8;
Executarea scriptului de mai sus în MySQL workbench împotriva Myflixdb ne oferă următoarele rezultate prezentate 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 |
Rețineți că numai filmele cu categoria ID 8 au fost afectate de clauza noastră GROUP BY.
rezumat
- SQL BY Clause GROUP BY este utilizat pentru a grupa rânduri cu aceleași valori.
- Clauza GROUP BY este utilizată împreună cu instrucțiunea SQL SELECT.
- Instrucțiunea SELECT utilizată în clauza GROUP BY poate fi utilizată numai conține nume de coloane, funcții agregate, constante și expresii.
- Clauza SQL Have este utilizată pentru a restricționa rezultatele returnate de clauza GROUP BY.
- 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.