Kas yra SQL grupė pagal sąlygą?
Sąlyga GROUP BY yra SQL komanda, naudojama grupuoti eilutes, turinčias tas pačias reikšmes . Sąlyga GROUP BY naudojama sakinyje SELECT. Pasirinktinai jis naudojamas kartu su kaupimo funkcijomis rengiant suvestines ataskaitas iš duomenų bazės.
Tai ir daro, apibendrindamas duomenis iš duomenų bazės.
Užklausos, kuriose yra sąlyga GROUP BY, vadinamos grupuotomis užklausomis ir kiekvienam sugrupuotam elementui pateikia tik vieną eilutę.
SQL GRUPĖ pagal sintaksę
Dabar, kai žinome, kas yra sąlyga SQL GROUP BY, pažiūrėkime į pagrindinės grupės pagal užklausą sintaksę.
SELECT statements… GROUP BY column_name1[,column_name2,… ] [HAVING condition];
ČIA
- „SELECT utasításiai…“ yra standartinė „SQL SELECT“ komandos užklausa.
- „ GROUP BY column_name1“ yra sąlyga, atliekanti grupavimą pagal column_name1.
- „[, column_name2,…]“ yra neprivaloma; žymi kitus stulpelių pavadinimus, kai grupavimas atliekamas daugiau nei viename stulpelyje.
- „[HAVING condition]“ yra neprivaloma; jis naudojamas norint apriboti eilutes, kurioms taikoma sąlyga „GROUP BY“. Tai panašu į WHERE sąlygą.
Grupavimas naudojant vieną stulpelį
Norėdami padėti suprasti SQL grupės pagal sąlygą poveikį, atlikime paprastą užklausą, kuri grąžina visus lyties įrašus iš narių lentelės.
SELECT `gender` FROM `members` ;
gender |
---|
Female |
Female |
Male |
Female |
Male |
Male |
Male |
Male |
Male |
Tarkime, kad norime gauti unikalias lyčių vertybes. Mes galime naudoti šią užklausą -
SELECT `gender` FROM `members` GROUP BY `gender`;
Minėto scenarijaus vykdymas „MySQL“ darbastalyje su „Myflixdb“ suteikia mums šiuos rezultatus.
gender |
---|
Female |
Male |
Atkreipkite dėmesį, kad grąžinti tik du rezultatai. Taip yra todėl, kad mes turime tik du lyties tipus: Vyras ir Moteris. SQL GROUP sąlyga „GROUP BY“ sujungė visus „Male“ narius ir grąžino tik vieną eilutę. Tą patį padarė ir su „Moteriškomis“ narėmis.
Grupavimas naudojant kelis stulpelius
Tarkime, kad norime gauti filmo category_id ir atitinkamų metų, kuriais jie buvo išleisti, sąrašą.
Stebėkime šios paprastos užklausos išvestį
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 |
Aukščiau pateiktame rezultate yra daug dublikatų.
Atlikime tą pačią užklausą naudodami grupę SQL sistemoje -
SELECT `category_id`,`year_released` FROM `movies` GROUP BY `category_id`,`year_released`;
Minėto scenarijaus vykdymas „MySQL“ darbastalyje prieš „myflixdb“ suteikia mums šiuos rezultatus.
category_id | year_released |
---|---|
NULL | 2008 |
NULL | 2010 |
NULL | 2012 |
1 | 2011 |
2 | 2008 |
6 | 2007 |
7 | 1920 |
8 | 1920 |
8 | 2005 |
8 | 2007 |
Sąlyga „GROUP BY“ taikoma ir kategorijos ID, ir išleistiems metams, siekiant nustatyti unikalias eilutes aukščiau pateiktame pavyzdyje.
Jei kategorijos ID yra tas pats, bet išleisti metai yra skirtingi, eilutė laikoma unikalia. Jei kategorijos ID ir išleisti metai yra vienodi daugiau nei vienoje eilutėje, tai laikoma kopija ir tik viena eilutė rodoma.
Grupavimo ir agregavimo funkcijos
Tarkime, kad norime, kad mūsų duomenų bazėje būtų bendras vyrų ir moterų skaičius. Norėdami tai padaryti, galime naudoti toliau pateiktą scenarijų.
SELECT `gender`,COUNT(`membership_number`) FROM `members` GROUP BY `gender`;
Minėto scenarijaus vykdymas „MySQL“ darbastalyje prieš „myflixdb“ suteikia mums šiuos rezultatus.
gender | COUNT('membership_number') |
---|---|
Female | 3 |
Male | 5 |
Žemiau pateikti rezultatai yra sugrupuoti pagal kiekvieną paskelbtą unikalią lyties vertę, o sugrupuotų eilučių skaičius skaičiuojamas naudojant COUNT suvestinės funkciją.
Užklausos rezultatų apribojimas naudojant sąlygą HAVING
Ne visada norime grupuoti visus duotosios lentelės duomenis. Bus atvejų, kai norėsime apriboti savo rezultatus pagal tam tikrus kriterijus. Tokiais atvejais galime naudoti sąlygą HAVING
Tarkime, kad norime žinoti visus filmo kategorijos ID 8 išleidimo metus. Norėdami pasiekti savo rezultatus, naudosime šį scenarijų.
SELECT * FROM `movies` GROUP BY `category_id`,`year_released` HAVING `category_id` = 8;
Minėto scenarijaus vykdymas „MySQL“ darbastalyje su „Myflixdb“ suteikia mums šiuos rezultatus.
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
9 | Honey mooners | John Schultz | 2005 | 8 |
5 | Daddy's Little Girls | NULL | 2007 | 8 |
Atkreipkite dėmesį, kad „GROUP BY“ sąlyga paveikė tik tuos filmus, kurių ID kategorija yra 8.
Santrauka
- „GROUP BY“ sakinys SQL naudojamas grupuoti eilutes su tomis pačiomis reikšmėmis.
- Sąlyga „GROUP BY“ naudojama kartu su sakiniu „SQL SELECT“.
- Sąraše GROUP BY naudojamą SELECT sakinį galima naudoti tik su stulpelių pavadinimais, suvestinėmis funkcijomis, konstantomis ir išraiškomis.
- „SQL Having Clause“ yra naudojama norint apriboti „GROUP BY“ sąlygos grąžintus rezultatus.
- „MYSQL GROUP BY“ sąlyga naudojama duomenims rinkti iš kelių įrašų ir grąžintų įrašų, nustatytų vieno ar daugiau stulpelių.