Hyrje në SQL

8.      KLAUZOLA HAVING

Klauzola HAVING përdoret në qoftë se përdoruesi kërkon që tabela e rezultateve të pasqyrojë ato rekorde për të cilat funksionet e agreguara plotësojnë kushtet e specifikuara. Për shembull, kërkohet që të nxirren rekordet e qyteteve të cilat e kanë shumën e sasisë së shitjeve në total deri në 2000. Në vend të përdorimit të klauzolës WHERE, është e nevojshme të përdoret klauzola HAVING për shkak të ekzistencës në këtë rast të funksioneve agregat. Kjo klauzolëështë tipikisht e vendosur në fund të kodit SQL, dhe një kod SQL me këtë klauzolë mund ose jo ta përfshijë klauzolën GROUP BY. Sintaksa e përgjithshme e kësaj klauzole është

Ne mund tëpërcaktojmë në zgjedhjen SELECT një, disa ose asnjë kollonë krahas funksionit agregat. Nëse nuk përcaktohet asnjë kollonë në SELECT, atëherë nuk është e nevojshme as klauzola GROUP BY.

Le të shqyrtojmë një shembull të një tabele të dhënash të një universiteti që përmban fushat: emri studentit, lënda, nota, mungesa. Në qoftë se kërkojmë të nxjerrim nga tabela “Universiteti” ato lëndë që mesataren e notave e kanë patur më të vogël se 9 duke përdorur klauzolën WHERE, atëherë kodi SQL i zhvilluar si më poshtë do të rezultojë i gabuar.

Për të realizuar këtë, ndryshohet kodi i mësipërm duke hequr klauzolën WHERE dhe shtuar në fund klauzolën HAVING si më poshtë:

Tabela e rezultateve do të përmbajë vetëm ato rekorde të cilat i takojnë lëndëve me mesatare të notave më të vogël se 7. Pra, HAVING mundëson përdorimin e funksioneve agregat në një pohim krahasimi, duke bërë krahasimisht atëçfarë bën WHERE për rekordet individuale. Por klauzola HAVING funksionon edhe në rast se ajo përmban një kusht në formën e një shprehjeje jo të agreguar. Le të konsiderojmë shembullin e mëposhtëm.

Në këtë rast tabela e rezultateve ndryshon sepse ajo do të nxjerrë ato rekorde që i takojnë lëndëve për të cilat nuk ka student që e kanë notën mbi ose 8. Pra, sipas kodit SQL, llogaritet mesatarja e notave e grupuar sipas lëndëve dhe ato lëndë që i kanë të gjitha notat më të vogla se 7 do të pasqyrohen në tabelën e rezultateve.

Ne mund të përdorim më shumë se një funksion agregat me klauzolën HAVING si në shembullin me poshtë.

Siç shihet, tabela e rezultateve përmban rekordet e lëndëve të cilat plotësojnë dy kushte, mesataren e notave e kanë më të vogël se 7 dhe mesataren e mungesave e kanë më të vogël se 5.

Ne mund të përdorim me klauzolën HAVING një funksion agregat që mund të mos jetë i specifikuar në komandën SELECT. Për shembull, le të konsiderojmë kodin SQL si vijon.

Tabela e rezulteteve do të nxjerrë rekordet me fushat e lëndës dhe mesataret e notave dhe mungesave sipas lëndëve, por vetëm për ato lëndë që kanë më shumë se 20 rekorde në tabelën “Universiteti”.

Klauzola HAVING mund të përdoret edhe me operatorë të tjerë, si për shembull

Tabela e rezultateve do të përmbajë në këtë rast dy rekorde përkatësisht për lëndët matematikë dhe fizikë dhe për to pasqyron mesataren e notave të këtyre dy lëndëve. Lëndët e tjera nuk konsiderohen.

[cite]
Comments
All comments.
Comments