SQL GROUP BY un klauzula ar piemēriem

Satura rādītājs:

Anonim

Kas ir SQL grupa pēc klauzulas?

Klauzula GROUP BY ir SQL komanda, ko izmanto, lai grupētu rindas, kurām ir vienādas vērtības . Klauzula GROUP BY tiek izmantota SELECT paziņojumā. Pēc izvēles to izmanto kopā ar apkopošanas funkcijām, lai no datu bāzes izveidotu kopsavilkuma pārskatus.

To tas dara, apkopojot datus no datu bāzes.

Vaicājumus, kuros ir klauzula GROUP BY, sauc par grupētiem vaicājumiem, un par katru sagrupēto vienumu tiek atgriezta tikai viena rinda.

SQL GROUP BY sintakse

Tagad, kad mēs zinām, kas ir klauzula SQL GROUP BY, aplūkosim pamata grupas sintaksi pēc vaicājuma.

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

ŠEIT

  • "SELECT utasítási ..." ir standarta SQL SELECT vaicājums.
  • " GROUP BY column_name1" ir klauzula, kas veic grupēšanu, pamatojoties uz column_name1.
  • "[, column_name2,…]" nav obligāts; apzīmē citus kolonnu nosaukumus, ja grupēšana tiek veikta vairāk nekā vienā kolonnā.
  • "[HAVING condition]" nav obligāts; to izmanto, lai ierobežotu rindas, kuras ietekmē klauzula GROUP BY. Tas ir līdzīgs WHERE klauzulai.

Grupēšana, izmantojot vienu kolonnu

Lai palīdzētu izprast SQL grupas klauzulas ietekmi, izpildīsim vienkāršu vaicājumu, kas no dalībnieku tabulas atgriež visus dzimuma ierakstus.

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

Pieņemsim, ka mēs vēlamies iegūt unikālas vērtības dzimumiem. Mēs varam izmantot šādu vaicājumu -

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

Iepriekš minētā skripta izpildīšana MySQL darbagaldā pret Myflixdb dod mums šādus rezultātus.

 
gender
Female
Male

Ņemiet vērā, ka ir atgriezti tikai divi rezultāti. Tas ir tāpēc, ka mums ir tikai divi vīriešu un sieviešu dzimuma veidi. SQL grupas klauzula GROUP BY sagrupēja visus "Male" dalībniekus un atdeva tam tikai vienu rindu. Tas pats notika ar "Sieviešu" dalībniecēm.

Grupēšana, izmantojot vairākas kolonnas

Pieņemsim, ka mēs vēlamies iegūt sarakstu ar movie category_id un attiecīgajiem gadiem, kuros tās tika izlaistas.

Novērosim šī vienkāršā vaicājuma iznākumu

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

Iepriekš minētajam rezultātam ir daudz dublikātu.

Izpildīsim to pašu vaicājumu, izmantojot grupu ar SQL -

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

Iepriekš minētā skripta izpildīšana MySQL darbagaldā pret myflixdb dod mums šādus rezultātus, kas parādīti zemāk.

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

Klauzula GROUP BY darbojas gan pēc kategorijas id, gan izlaista gada, lai identificētu unikālās rindas mūsu iepriekš minētajā piemērā.

Ja kategorijas ID ir tāds pats, bet izlaistais gads ir atšķirīgs, rindu uzskata par unikālu. Ja kategorijas id un izlaistais gads ir vienāds vairāk nekā vienā rindā, tas tiek uzskatīts par dublikātu un tikai vienu rindu ir parādīts.

Grupēšanas un apkopošanas funkcijas

Pieņemsim, ka mēs vēlamies, lai mūsu datu bāzē būtu kopējais vīriešu un sieviešu skaits. Lai to izdarītu, mēs varam izmantot šo zemāk parādīto skriptu.

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

Iepriekš minētā skripta izpildīšana MySQL darbagaldā pret myflixdb dod mums šādus rezultātus.

 
gender COUNT('membership_number')
Female 3
Male 5

Zemāk parādītie rezultāti ir sagrupēti pēc katras ievietotās unikālās dzimuma vērtības, un grupēto rindu skaits tiek saskaitīts, izmantojot apkopošanas funkciju COUNT.

Vaicājuma rezultātu ierobežošana, izmantojot klauzulu HAVING

Ne vienmēr mēs vēlēsimies grupēt visus datus attiecīgajā tabulā. Būs reizes, kad mēs vēlēsimies ierobežot savus rezultātus tikai ar noteiktu kritēriju. Šādos gadījumos mēs varam izmantot klauzulu HAVING

Pieņemsim, ka mēs vēlamies uzzināt visus filmu kategorijas ID 8. izlaišanas gadus. Lai sasniegtu savus rezultātus, mēs izmantotu šādu skriptu.

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

Iepriekš minētā skripta izpildīšana MySQL darbagaldā pret Myflixdb dod mums šādus rezultātus, kas parādīti zemāk.

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

Ņemiet vērā, ka mūsu GROUP BY klauzula ir ietekmējusi tikai filmas ar 8. kategorijas ID.

Kopsavilkums

  • Klauzulu GROUP BY SQL izmanto rindu grupēšanai ar vienādām vērtībām.
  • Klauzula GROUP BY tiek izmantota kopā ar SQL SELECT priekšrakstu.
  • Klauzulā GROUP BY izmantotais SELECT var izmantot tikai kolonnu nosaukumus, apkopotās funkcijas, konstantes un izteiksmes.
  • SQL klauzula tiek izmantota, lai ierobežotu rezultātus, ko nodrošina klauzula GROUP BY.
  • MYSQL GROUP BY klauzula tiek izmantota, lai apkopotu datus no vairākiem ierakstiem un atgrieztajiem ierakstiem, kurus iestatījusi viena vai vairākas kolonnas.