U trendu

SQL – Grupisanje podataka klauzulom „Group By“

Grupisanje podataka u SQL-u najčešće vršimo uz pomoć SELECT naredbe i njene klauzule „GROUP BY“. Grupisanje se vrši po određenoj vrednosti nekog polja u tabeli, a svi grupisani podaci imaju istu vrednost u datom polju. Svi duplikati (slogovi sa istom vrednošću u određenom polju) se smeštaju u jednu grupu, i nad njima može da se obavlja ista funkcija (npr. neka od agregatnih funkcija). Pri ovome, u jednom SELECT iskazu mogu da se izvrše grupisanja po više polja. Klauzulom „GROUP BY“ dobijamo samo jedinstvene vrednosti iz određenog polja tabele, koje će se sortirati prema rastućem redosledu. Ovo je slično klauzuli „ORDER BY“, samo što se kod ove ne izbacuju slogovi sa dupliranim vrednostima.

U sledećem primeru videćemo jednostavan upit koji će prebrojati radnike po sektorima u kojima rade. Tabela koju ćemo koristiti je „Radnik“, a definisali smo je i pre, u ranijim prilozima: „Radnik“ sa poljima (SIF_R, IME, PREZ, SIF_S). Upit će glasiti:


SELECT Radnik.SIF_S, Count(*) AS stanje
FROM Radnik
GROUP BY Radnik.SIF_S;

Rezultat upita biće kao na slici. Za prebrojavanje broja radnika iskoristili smo agregatnu funkciju „COUNT“, a dobijene razultate smo smestili u polje „stanje“. Pri ovom upitu sektori će se prvo sortirati (kao „ORDER BY“ klauzuli), a zatim će se izbaciti duplikati (tj. neće se prikazati).

Još jedna od bitnih stvari je upotreba klauzule „HAVING“, koja služi za selekciju samo određenih grupa podataka, prethodno grupisanih sa „GROUP BY“. Klauzulom „HAVING“ upoređujemo neko svojstvo izdvojene grupe sa konstantom, a zatim izdvajamo samo one slogove koji zadovoljavaju ovaj logički izraz. Recimo da treba da izdvojimo sve sektore sa određenim brojem radika, upit bi onda glasio:


SELECT Radnik.SIF_S, Count(*) AS stanje
FROM Radnik
GROUP BY Radnik.SIF_S
HAVING Count(*)=1;

Rezultat upita bi bio (izveden iz tabela sa slike):


SIF_S stanje
——————
24 1


Kao što vidite, grupisali smo slogove po sektorima i prebrojali broj radnika u svakom, a zatim smo izdvojili samo one sektore koji imaju samo jednog radnika.

Pratite Krstaricu i preko mobilne aplikacije za Android i iPhone.