logo

SQL GROUP BY

SQL klauzula GROUP BY koristi se za raspoređivanje identičnih podataka u grupe na temelju jednog ili više stupaca. Obično se koristi s agregatnim funkcijama kao što su COUNT() SUM() AVG() MAX() i MIN() za izvođenje izračuna na svakoj grupi podataka.

voće_slika' title=

Primjer: Prvo ćemo stvoriti demo SQL baza podataka i tablica na kojoj ćemo koristiti naredbu GROUP BY.

Zaposlenici' loading='lazy' title=

Upit:



SELECT Department SUM(Salary) AS TotalSalary FROM Employees GROUP BY Department;

Izlaz:

Grupiraj po upitu' loading='lazy' title=

Sintaksa:

SELECT column1 aggregate_function(column2) FROM table_name WHERE condition GROUP BY column1 column2;
  • funkcija_agregata: funkcija koja se koristi za agregaciju, npr. SUM() PROSJEC() COUNT().
  • naziv_tablice: naziv tablice iz koje se biraju podaci.
  • stanje: Neobavezni uvjet za filtriranje redaka prije grupiranja (koristi se s WHERE).
  • stupac1 stupac2: Stupci na koje se primjenjuje grupiranje.

Primjeri GROUP BY

Pretpostavimo da imamo tablicu Student. Umetnut ćemo neke uzorke podataka u ovu tablicu, a zatim izvesti operacije pomoću GROUP BY da bismo razumjeli kako grupira retke na temelju stupca i agregira podatke.

grp' loading='lazy' title=

Primjer 1: Grupiranje po jednom stupcu

Kada grupiramo prema jednom stupcu, kombiniraju se retci s istom vrijednošću u tom stupcu. Na primjer, grupiranje po predmetu pokazuje koliko je učenika upisano na svaki predmet.

Upit:

SELECT subject COUNT(*) AS Student_Count FROM Student GROUP BY subject;

Izlaz:

gr-1' loading='lazy' title=

Obrazloženje: Svaki se predmet pojavljuje dva puta u tablici tako da je broj za matematiku i prirodne nauke na engleskom jeziku 2.

Primjer 2: Grupiranje prema više stupaca

Korištenje GROUP BY s više stupaca grupira retke koji dijele iste vrijednosti u tim stupcima. Na primjer, grupiranje po predmetu i godini kombinirat će retke s istim parom predmet–godina i možemo prebrojati koliko učenika spada u svaku grupu.

Upit:

sortirati školjke
SELECT subject year COUNT(*) FROM Student GROUP BY subject year;

Izlaz:

studenti-grp' loading='lazy' title=

Objašnjenje: Studenti s istim predmetom i godinom grupiraju se zajedno. Budući da se svaki par tema-godina pojavljuje dva puta, broj je 2 za svaku grupu.

HAVING klauzula u GROUP BY klauzula

Klauzula HAVING koristi se za filtriranje rezultata nakon grupiranja, posebno kada se radi sa skupnim funkcijama kao što su SUM() COUNT() ili AVG(). Za razliku od WHERE primjenjuje uvjete na grupirane podatke.

emp' loading='lazy' title=

Primjer 1: Filtrirajte prema ukupnoj plaći

U ovom upitu grupiramo zaposlenike po imenu i prikazujemo samo one čija je ukupna plaća veća od 50000.

SELECT NAME SUM(sal) FROM Emp GROUP BY name HAVING SUM(sal)>50000; 

Izlaz

dob-1' loading='lazy' title=

Obrazloženje : U rezultatu se pojavljuju samo zaposlenici čija ukupna plaća prelazi 50000.

Primjer 2: Filtrirajte prema prosječnoj plaći

U ovom upitu grupiramo zaposlenike po godinama i prikazujemo samo one dobne skupine gdje je prosječna plaća iznad 60000.

SELECT age AVG(sal) AS Average_Salary FROM emp GROUP BY age HAVING AVG(sal) > 60000;

Izlaz:

izlaz-1' loading='lazy' title=

Obrazloženje: Ovaj upit grupira zaposlenike prema dobi i izračunava prosječnu plaću za svaku dob. Prikazane su samo one dobne skupine kod kojih je prosječna plaća veća od 60000.

Napravi kviz