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 na www.krstarica.com