Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ

Funksionet agregate në sql janë. Funksionet e Agregatit SQL

Le të mësojmë të përmbledhim. Jo, këto nuk janë rezultatet e mësimit të SQL, por rezultatet e vlerave të kolonave të tabelave të bazës së të dhënave. Funksionet e agregatit SQL funksionojnë në vlerat e një kolone për të prodhuar një vlerë të vetme rezultati. Funksionet agregate SQL më të përdorura janë SUM, MIN, MAX, AVG dhe COUNT. Ekzistojnë dy raste në të cilat duhet të përdoren funksionet agregate. Së pari, funksionet agregate përdoren vetë dhe kthejnë një vlerë të vetme rezultati. Së dyti, funksionet agregate përdoren me klauzolën SQL GROUP BY, domethënë me grupimin sipas fushave (kolonave) për të marrë vlerat që rezultojnë në secilin grup. Konsideroni fillimisht rastet e përdorimit të funksioneve agregate pa grupim.

Funksioni SQL SUM

Funksioni SQL SUM kthen shumën e vlerave të një kolone në një tabelë të bazës së të dhënave. Mund të aplikohet vetëm për kolonat vlerat e të cilave janë numra. Pyetjet SQL për të marrë shumën që rezulton fillojnë kështu:

ZGJIDH SHUMEN(COLUMNAME) ...

Kjo shprehje ndiqet nga FROM (TABLE_NAME), dhe më pas një kusht mund të specifikohet duke përdorur klauzolën WHERE. Për më tepër, DISTINCT mund t'i vendoset parashtesë emrit të një kolone për të treguar se do të merren parasysh vetëm vlerat unike. Si parazgjedhje, të gjitha vlerat merren parasysh (për këtë, ju mund të specifikoni në mënyrë specifike jo DISTINCT, por ALL, por fjala ALL është opsionale).

Shembulli 1 Ekziston një bazë të dhënash e kompanisë me të dhëna për departamentet dhe punonjësit e saj. Tabela e Stafit ka gjithashtu një kolonë me të dhënat e pagave të punonjësve. Zgjedhja nga tabela ka formën e mëposhtme (për të zmadhuar foton, klikoni mbi të me butonin e majtë të miut):

Për të marrë shumën e të gjitha pagave, përdorni pyetjen e mëposhtme:

ZGJIDH SHUMËN (Paga) NGA Stafi

Ky pyetje do të kthejë vlerën 287664.63.

Dhe tani . Në ushtrime tashmë po fillojmë të ndërlikojmë detyrat, duke i afruar ato me ato që hasen në praktikë.

Funksioni SQL MIN

Funksioni SQL MIN funksionon gjithashtu në kolona, ​​vlerat e të cilave janë numra dhe kthen minimumin e të gjitha vlerave në kolonë. Ky funksion ka një sintaksë të ngjashme me atë të funksionit SUM.

Shembulli 3 Baza e të dhënave dhe tabela janë të njëjta si në shembullin 1.

Kërkohet të zbulohet paga minimale për punonjësit e departamentit numër 42. Për ta bërë këtë, shkruani pyetjen e mëposhtme:

Kërkesa do të kthejë vlerën 10505.90.

Dhe perseri ushtrim për vetëvendosje. Në këtë dhe disa ushtrime të tjera, do t'ju duhet jo vetëm tabela e Stafit, por edhe tabela Org që përmban të dhëna për divizionet e kompanisë:


Shembulli 4 Tabela Org i shtohet tabelës Staff, që përmban të dhëna për divizionet e kompanisë. Tregoni numrin minimal të viteve që një punonjës i vetëm ka punuar në një departament të vendosur në Boston.

Funksioni SQL MAX

Funksioni SQL MAX funksionon në mënyrë të ngjashme dhe ka një sintaksë të ngjashme, e cila përdoret kur dëshironi të përcaktoni vlerën maksimale midis të gjitha vlerave të një kolone.

Shembulli 5

Kërkohet të zbulohet paga maksimale e punonjësve të departamentit numër 42. Për ta bërë këtë, shkruani pyetjen e mëposhtme:

Kërkesa do të kthejë vlerën 18352.80

Eshte koha ushtrime për vetëvendosje.

Shembulli 6 Përsëri po punojmë me dy tabela - Stafi dhe Org. Shfaq emrin e departamentit dhe sasinë maksimale të komisioneve të marra nga një punonjës në departamentin që i përket grupit të departamenteve (Divizioni) Lindor. Përdorni JOIN (bashkimi i tabelave) .

Funksioni SQL AVG

Ajo që u tha për sintaksën për funksionet e përshkruara më parë është gjithashtu e vërtetë për funksionin SQL AVG. Ky funksion kthen mesataren e të gjitha vlerave në një kolonë.

Shembulli 7 Baza e të dhënave dhe tabela janë të njëjta si në shembujt e mëparshëm.

Le të kërkohet të zbulohet kohëzgjatja mesatare e shërbimit të punonjësve të departamentit numër 42. Për ta bërë këtë, ne shkruajmë pyetjen e mëposhtme:

Rezultati do të jetë 6.33

Shembulli 8 Ne punojmë me një tavolinë - Stafi. Tregoni pagën mesatare të punonjësve me përvojë nga 4 deri në 6 vjet.

Funksioni SQL COUNT

Funksioni SQL COUNT kthen numrin e regjistrimeve në një tabelë të bazës së të dhënave. Nëse specifikoni SELECT COUNT(COLUMNAME) ... në pyetje, atëherë rezultati do të jetë numri i regjistrimeve pa marrë parasysh ato rekorde në të cilat vlera e kolonës është NULL (e papërcaktuar). Nëse përdorni një yll si argument dhe filloni një pyetje SELECT COUNT(*) ..., rezultati do të jetë numri i të gjitha rekordeve (rreshtave) në tabelë.

Shembulli 9 Baza e të dhënave dhe tabela janë të njëjta si në shembujt e mëparshëm.

Ju dëshironi të dini numrin e të gjithë punonjësve që marrin komisione. Numri i punonjësve, vlerat e kolonës Comm të të cilëve nuk janë NULL do të kthejë pyetjen e mëposhtme:

ZGJIDH COUNT(Kom) NGA Stafi

Rezultati do të jetë vlera 11.

Shembulli 10 Baza e të dhënave dhe tabela janë të njëjta si në shembujt e mëparshëm.

Nëse dëshironi të dini numrin total të rekordeve në tabelë, atëherë përdorni pyetjen me një yll si argument për funksionin COUNT:

ZGJIDH NUMRIN(*) NGA Stafi

Rezultati do të jetë vlera 17.

Tjetra ushtrim për vetëvendosje ju duhet të përdorni një nënpyetje.

Shembulli 11. Ne punojmë me një tavolinë - Stafi. Shfaq numrin e punonjësve në departamentin e Plains.

Funksionet Agregate me SQL GROUP BY

Tani le të shohim përdorimin e funksioneve agregate së bashku me klauzolën SQL GROUP BY. Klauzola SQL GROUP BY përdoret për të grupuar vlerat që rezultojnë sipas kolonave në një tabelë të bazës së të dhënave.

Shembulli 12. Ekziston një portal i bazës së të dhënave për reklama. Ka një tabelë reklamash që përmban të dhëna për reklamat që janë dorëzuar për javën. Kolona Kategoria përmban të dhëna për kategoritë e mëdha të reklamave (për shembull, Pasuri të paluajtshme) dhe kolona Pjesë përmban të dhëna për pjesët më të vogla që përfshihen në kategori (për shembull, pjesët e apartamenteve dhe vilave janë pjesë e kategorisë së pasurive të paluajtshme). Kolona Njësitë përmban të dhëna për numrin e reklamave të dorëzuara, dhe kolona Paratë përmban shumën e parave të fituara për paraqitjen e reklamave.

KategoriapjesëNjësitëParatë
Transportimjetet motorike110 17600
PronaApartamente89 18690
PronaDachas57 11970
TransportiMotoçikleta131 20960
Materiale ndërtimidërrasat68 7140
inxhinieri elektrikeTV127 8255
inxhinieri elektrikeFrigoriferë137 8905
Materiale ndërtimiRegjistrat112 11760
Koha e lirëlibra96 6240
PronaShtëpitë47 9870
Koha e lirëMuzikë117 7605
Koha e lirëLojëra41 2665

Duke përdorur klauzolën SQL GROUP BY, gjeni shumën e parave të krijuara duke paraqitur reklama në secilën kategori. Ne shkruajmë kërkesën e mëposhtme.

Mësimi do të mbulojë temën sql duke riemërtuar një kolonë (fusha) duke përdorur fjalën e shërbimit AS; merret parasysh edhe tema e funksioneve agregate në sql. Shembujt e kërkesave specifike do të analizohen

Emrat e kolonave në pyetje mund të riemërohen. Kjo i bën rezultatet më të lexueshme.

Në SQL, riemërtimi i fushave shoqërohet me përdorimin e AS fjalë kyçe, i cili përdoret për të riemërtuar emrat e fushave në grupet e rezultateve

Sintaksë:

ZGJIDH<имя поля>AS<псевдоним>NGA…

Konsideroni një shembull të riemërtimit në SQL:

Një shembull i bazës së të dhënave "Instituti": Shfaqni emrat e mësuesve dhe pagat e tyre, për ata mësues që paga e tyre është nën 15000, riemërtoni fushën zarplata në "paga e ulët"


✍ Zgjidhja:

Riemërtimi i kolonave në SQL është shpesh i nevojshëm kur llogaritni vlerat e lidhura me fusha të shumta tabelat. Konsideroni një shembull:

Një shembull i bazës së të dhënave "Instituti": Nga tabela e mësuesve, shfaqni fushën e emrit dhe llogaritni shumën e pagës dhe bonusit, duke emërtuar fushën "bonus_paga"


✍ Zgjidhja:
1 2 SELECT emrin, (zarplata+ premia) AS zarplata_premia FROM mësues;

SELECT emrin, (zarplata+premia) AS zarplata_premia FROM mësues;

Rezultati:

Funksionet e përmbledhura në SQL

Funksionet agregate në sql përdoren për të marrë vlerat totale dhe për të vlerësuar shprehjet:

Të gjitha funksionet agregate kthejnë një vlerë të vetme.

Funksionet COUNT, MIN dhe MAX zbatohen për çdo lloj të dhënash.

Funksionet SUM dhe AVG përdoren vetëm për fushat numerike.
Ekziston një ndryshim midis funksioneve COUNT(*) dhe COUNT(): ky i fundit nuk merr parasysh vlerat NULL gjatë llogaritjes.

E rëndësishme: kur punoni me funksione agregate në SQL, përdoret një fjalë funksioni AS


Një shembull i bazës së të dhënave "Instituti": Merrni vlerën e pagës më të lartë midis mësuesve, shfaqni totalin si "max_zp"


✍ Zgjidhja:
SELECT MAX (zarplata) AS max_zp NGA mësuesit;

SELECT MAX(zarplata) AS max_sal NGA mësuesit;

Rezultatet:

Konsideroni një shembull më kompleks të përdorimit të funksioneve agregate në sql.


✍ Zgjidhja:

Klauzola GROUP BY në SQL

Grupi sipas deklaratës në sql zakonisht përdoret në lidhje me funksionet agregate.

Funksionet e përmbledhura ekzekutohen në të gjitha vargjet e pyetjeve që rezultojnë. Nëse pyetja përmban një klauzolë GROUP BY, çdo grup rreshtash i specifikuar në klauzolën GROUP BY përbën një grup dhe funksionet e përgjithshme ekzekutohen. për secilin grup veç e veç.

Shqyrtoni një shembull me tabelën e mësimeve:

Shembull:

E rëndësishme: Kështu, si rezultat i përdorimit të GROUP BY, të gjitha rreshtat dalëse të pyetjes ndahen në grupe të karakterizuara nga i njëjti kombinim vlerash në këto kolona (d.m.th., funksionet agregate kryhen për secilin grup veç e veç).

Në të njëjtën kohë, duhet të merret parasysh se kur grupohet sipas një fushe që përmban vlera NULL, të gjitha regjistrimet e tilla do të bien në një grup.

Për lloje të ndryshme printerësh, përcaktoni koston dhe sasinë mesatare të tyre (d.m.th. veçmas për lazer, inkjet dhe matricë). Përdorni funksionet agregate. Rezultati duhet të duket si ky:

Duke pasur deklaratë SQL

Klauzola HAVING në SQL nevojitet për të kontrolluar vlerat, të cilat fitohen duke përdorur funksionin agregat pas grupimit(pas përdorimit GROUP BY). Një kontroll i tillë nuk mund të përfshihet në një klauzolë WHERE.

Shembull: Dyqani i kompjuterëve DB. Llogaritni çmimin mesatar të kompjuterëve me të njëjtën shpejtësi procesori. Kryeni llogaritjen vetëm për ato grupe, çmimi mesatar i të cilëve është më pak se 30,000.

Nënseksionet e mëposhtme përshkruajnë klauzola të tjera të deklaratave SELECT që mund të përdoren në pyetje, si dhe funksione të përgjithshme dhe grupe deklaratash. Si kujtesë, deri më tani kemi mbuluar përdorimin e klauzolës WHERE, dhe në këtë artikull do të shikojmë klauzolat GROUP BY, ORDER BY dhe HAVING dhe do të japim disa shembuj të përdorimit të këtyre klauzolave ​​në lidhje me agregatin. funksionet që mbështeten në Transact-SQL.

GRUP SIPAS ofertës

Fjali GRUP NGA grupon grupin e rreshtave të zgjedhur për të prodhuar një grup rreshtash përmbledhës bazuar në vlerat e një ose më shumë kolonave ose shprehjeve. Një përdorim i thjeshtë i klauzolës GROUP BY tregohet në shembullin e mëposhtëm:

PËRDORIMI SampleDb; ZGJIDH PUNËN NGA Punimet_Në GRUPI SIPAS Punës;

Në këtë shembull, pozicionet e punonjësve zgjidhen dhe grupohen.

Në shembullin e mësipërm, klauzola GROUP BY krijon një grup të veçantë për të gjitha vlerat e mundshme (përfshirë NULL) të kolonës Job.

Përdorimi i kolonave në klauzolën GROUP BY duhet të plotësojë disa kushte. Në veçanti, çdo kolonë në listën e përzgjedhjes së pyetjes duhet të shfaqet gjithashtu në klauzolën GROUP BY. Kjo kërkesë nuk zbatohet për konstantat dhe kolonat që janë pjesë e një funksioni agregat. (Funksionet agregate diskutohen në nënseksionin tjetër.) Kjo ka kuptim sepse vetëm kolonave në klauzolën GROUP BY u garantohet një vlerë për grup.

Një tabelë mund të grupohet sipas çdo kombinimi të kolonave të saj. Shembulli më poshtë tregon grupimin e rreshtave të tabelës Works_on në dy kolona:

PËRDORIMI SampleDb; SELECT Numri i Projektit, Puna NGA Punimet_Në GRUPI SIPAS Numri i projektit, Punë;

Rezultati i kësaj pyetje është:

Bazuar në rezultatet e pyetjes, mund të shihni se ka nëntë grupe me kombinime të ndryshme të numrit dhe pozicionit të projektit. Sekuenca e emrave të kolonave në klauzolën GROUP BY nuk duhet të jetë e njëjtë si në listën e kolonave SELECT.

Funksionet agregate

Funksionet agregate përdoren për të marrë vlerat totale. Të gjitha funksionet e përgjithshme mund të ndahen në kategoritë e mëposhtme:

    funksionet e zakonshme të agregatit;

    funksionet e agregatit statistikor;

    funksionet agregate të përcaktuara nga përdoruesi;

    funksionet e agregatit analitik.

Këtu do të shikojmë tre llojet e para të funksioneve agregate.

Funksionet e zakonshme të agregatit

Gjuha Transact-SQL mbështet gjashtë funksionet e mëposhtme agregate: MIN, MAX, SHUMË, AVG, COUNT, COUNT_BIG.

Të gjithë funksionet agregate kryejnë llogaritjet në një argument të vetëm, i cili mund të jetë ose një kolonë ose një shprehje. (Përjashtimi i vetëm është forma e dytë e dy funksioneve COUNT dhe COUNT_BIG, përkatësisht COUNT(*) dhe COUNT_BIG(*) përkatësisht.) Rezultati i çdo funksioni agregat është një vlerë konstante e shfaqur në një kolonë të veçantë rezultati.

Funksionet e përmbledhura janë të specifikuara në listën e kolonave të deklaratës SELECT, e cila mund të përmbajë gjithashtu një klauzolë GROUP BY. Nëse nuk ka asnjë klauzolë GROUP BY në deklaratën SELECT, dhe lista e kolonave zgjidhni përmban të paktën një funksion agregat, atëherë ajo nuk duhet të përmbajë kolona të thjeshta (përveç kolonave që shërbejnë si argumente për funksionin agregat). Prandaj, kodi në shembullin e mëposhtëm është i pasaktë:

PËRDORIMI SampleDb; SELECT Mbiemri, MIN(Id) FROM Employee;

Këtu, kolona LastName e tabelës Employee nuk duhet të jetë në listën e përzgjedhjes së kolonës sepse nuk është një argument i funksionit agregat. Nga ana tjetër, një listë e përzgjedhjes së kolonave mund të përmbajë emra kolonash që nuk janë argumente për një funksion agregat, nëse ato kolona janë argumente të klauzolës GROUP BY.

Një argument i funksionit agregat mund të paraprihet nga një nga dy fjalë kyçe të mundshme:

TE GJITHA

Përcakton që llogaritjet kryhen në të gjitha vlerat në kolonë. Kjo është vlera e paracaktuar.

TË DAKTUAR

Përcakton që vetëm vlerat unike të kolonës përdoren për llogaritjet.

Funksionet agregate MIN dhe MAX

Funksionet e agregatit MIN dhe MAX llogaritin respektivisht vlerën më të vogël dhe më të madhe të një kolone. Nëse pyetja përmban një klauzolë WHERE, funksionet MIN dhe MAX kthejnë vlerën më të vogël dhe më të madhe të rreshtave që plotësojnë kushtet e specifikuara. Shembulli i mëposhtëm tregon përdorimin e funksionit të agregatit MIN:

PËRDORIMI SampleDb; -- Kthen 2581 SELECT MIN(Id) AS "Min Id" FROM Employee;

Rezultati i dhënë në shembullin e mësipërm nuk është shumë informues. Për shembull, emri i punonjësit që zotëron këtë numër nuk dihet. Megjithatë, nuk është e mundur të merret ky mbiemër në mënyrën e zakonshme, sepse, siç u përmend më herët, nuk lejohet specifikimi i qartë i kolonës LastName. Për të marrë mbiemrin e këtij punonjësi së bashku me numrin më të ulët të personelit të një punonjësi, përdoret një nënpyetje. Shembulli i mëposhtëm tregon përdorimin e një nënpyetjeje të tillë, ku nënpyetja përmban deklaratën SELECT nga shembulli i mëparshëm:

Rezultati i ekzekutimit të pyetjes:

Përdorimi i funksionit të agregatit MAX tregohet në shembullin e mëposhtëm:

Funksionet MIN dhe MAX gjithashtu mund të marrin vargje dhe data si argumente. Në rastin e një argumenti të vargut, vlerat krahasohen duke përdorur rendin aktual të renditjes. Për të gjitha argumentet e të dhënave kohore të tipit data, vlera më e vogël e kolonës do të jetë data më e hershme dhe vlera më e madhe e kolonës do të jetë data më e fundit.

Mund të përdorni fjalën kyçe DISTINCT me funksionet MIN dhe MAX. Përpara se të përdoren funksionet e agregatit MIN dhe MAX, të gjitha vlerat NULL përjashtohen nga kolonat e tyre të argumentit.

Funksioni agregat SUM

Agregat Funksioni SUM llogarit shumën totale të vlerave të kolonës. Argumenti për këtë funksion agregat duhet të jetë gjithmonë i një lloji të të dhënave numerike. Përdorimi i funksionit agregat SUM tregohet në shembullin e mëposhtëm:

PËRDORIMI SampleDb; SELECT SUM (Buxhet) "Buxheti përmbledhës" NGA Projekti;

Ky shembull llogarit shumën totale të buxheteve të të gjitha projekteve. Rezultati i ekzekutimit të pyetjes:

Në këtë shembull, funksioni i përgjithshëm grupon të gjitha vlerat e buxhetit të projektit dhe përcakton shumën totale të tyre. Për këtë arsye, pyetja përmban një funksion grupimi të nënkuptuar (si të gjitha pyetjet e ngjashme). Funksioni i grupimit të nënkuptuar nga shembulli i mësipërm mund të specifikohet në mënyrë eksplicite, siç tregohet në shembullin më poshtë:

PËRDORIMI SampleDb; SELECT SUM (Buxhet) "Buxheti Total" FROM Project GROUP BY();

Përdorimi i opsionit DISTINCT eliminon të gjitha vlerat e kopjuara në kolonë përpara se të aplikoni funksionin SUM. Në mënyrë të ngjashme, të gjitha vlerat NULL hiqen përpara se të aplikoni këtë funksion agregat.

Funksioni i Agregatit AVG

Agregat Funksioni AVG kthen mesataren aritmetike të të gjitha vlerave në një kolonë. Argumenti për këtë funksion agregat duhet të jetë gjithmonë i një lloji të të dhënave numerike. Përpara se të përdoret funksioni AVG, të gjitha vlerat NULL hiqen nga argumenti i tij.

Përdorimi i funksionit të agregatit AVG tregohet në shembullin e mëposhtëm:

PËRDORIMI SampleDb; -- Kthen 133833 SELECT AVG (Budget) "Buxheti mesatar për projekt" FROM Project;

Këtu llogaritet mesatarja aritmetike e buxhetit për të gjitha buxhetet.

Përmbledhja e funksioneve COUNT dhe COUNT_BIG

Agregat COUNT funksion ka dy forma të ndryshme:

COUNT( emri_color) COUNT(*)

Forma e parë e funksionit numëron numrin e vlerave në kolonën col_name. Nëse fjala kyçe DISTINCT përdoret në një pyetje, çdo vlerë e dyfishtë e kolonës hiqet përpara se të zbatohet funksioni COUNT. Kjo formë e funksionit COUNT nuk merr parasysh vlerat NULL kur numëron numrin e vlerave në një kolonë.

Përdorimi i formës së parë të funksionit agregat COUNT tregohet në shembullin e mëposhtëm:

PËRDORIMI SampleDb; ZGJIDH numrin e projektit, COUNT (Punë e dallueshme) "Punon në projekt" NGA Works_on GROUP BY Project Number;

Këtu llogaritet numri i pozicioneve të ndryshme për çdo projekt. Rezultati i kësaj pyetje është:

Siç mund ta shihni nga pyetja e shembullit, vlerat NULL nuk u morën parasysh nga funksioni COUNT. (Shuma e të gjitha vlerave në kolonën e punës doli të jetë 7, jo 11, siç duhet të jetë.)

Forma e dytë e funksionit COUNT, d.m.th. funksioni COUNT(*) numëron numrin e rreshtave në një tabelë. Dhe nëse deklarata SELECT e një pyetjeje me funksionin COUNT(*) përmban një klauzolë WHERE me një kusht, funksioni kthen numrin e rreshtave që plotësojnë kushtin e specifikuar. Ndryshe nga forma e parë e funksionit COUNT, forma e dytë nuk i injoron vlerat NULL sepse ky funksion funksionon në rreshta, jo në kolona. Shembulli i mëposhtëm tregon përdorimin e funksionit COUNT(*):

PËRDORIMI SampleDb; SELECT Job AS "Lloji i punës", COUNT(*) "Ka nevojë për punëtorë" FROM Works_on GROUP BY Job;

Këtu llogaritet numri i pozitave në të gjitha projektet. Rezultati i ekzekutimit të pyetjes:

COUNT_BIG funksion ngjashëm me funksionin COUNT. I vetmi ndryshim midis tyre është lloji i rezultatit që ata kthejnë: funksioni COUNT_BIG kthen gjithmonë vlera BIGINT, ndërsa funksioni COUNT kthen vlera të dhënash INTEGER.

Funksionet e agregatit statistikor

Funksionet e mëposhtme përbëjnë një grup funksionesh agregate statistikore:

VAR

Llogarit variancën statistikore të të gjitha vlerave të përfaqësuara në një kolonë ose shprehje.

VARP

Llogarit variancën statistikore të popullatës së të gjitha vlerave të përfaqësuara në një kolonë ose shprehje.

STDEV

Llogarit devijimin standard (i cili llogaritet si rrënja katrore e variancës përkatëse) të të gjitha vlerave në një kolonë ose shprehje.

STDEVP

Llogarit devijimin standard të tërësisë së të gjitha vlerave në një kolonë ose shprehje.

Funksionet e përgjithshme të përcaktuara nga përdoruesi

Motori i bazës së të dhënave gjithashtu mbështet zbatimin e funksioneve të përcaktuara nga përdoruesi. Kjo aftësi i lejon përdoruesit të shtojnë funksionet agreguese të sistemit me funksione që ata mund t'i zbatojnë dhe instalojnë vetë. Këto funksione përfaqësojnë një klasë të veçantë funksionesh të përcaktuara nga përdoruesi dhe do të diskutohen më në detaje më vonë.

Duke pasur ofertë

Në një fjali DUKE përcakton një kusht që zbatohet për një grup rreshtash. Kështu, kjo klauzolë ka të njëjtin kuptim për grupet e rreshtave siç ka fjalia WHERE për përmbajtjen e tabelës përkatëse. Sintaksa e klauzolës HAVING është si më poshtë:

DUKE gjendje

Këtu, parametri i kushtit përfaqëson një kusht dhe përmban funksione ose konstante agregate.

Përdorimi i klauzolës HAVING me funksionin agregat COUNT(*) tregohet në shembullin e mëposhtëm:

PËRDORIMI SampleDb; -- Ktheni "p3" ZGJIDHni Numrin e Projektit NGA Works_on GRUPI SIPAS NUMRI i projektit duke pasur COUNT(*)

Në këtë shembull, duke përdorur klauzolën GROUP BY, sistemi grupon të gjitha rreshtat bazuar në vlerat në kolonën Numri i projektit. Pas kësaj, numërohet numri i rreshtave në secilin grup dhe zgjidhen grupet që përmbajnë më pak se katër rreshta (tre ose më pak).

Klauzola HAVING mund të përdoret gjithashtu pa funksione agregate, siç tregohet në shembullin më poshtë:

PËRDORIMI SampleDb; -- Kthen "Konsulent" ZGJIDH PUNËN NGA Works_on GRUPI SIPAS PUNËS QË KA PUNË LIKE "K%";

Ky shembull grupon rreshtat në tabelën Works_on sipas pozicionit dhe eliminon ato pozicione që nuk fillojnë me shkronjën "K".

Klauzola HAVING mund të përdoret gjithashtu pa klauzolën GROUP BY, megjithëse kjo nuk është një praktikë e zakonshme. Në këtë rast, të gjitha rreshtat e tabelës kthehen në të njëjtin grup.

Porositni sipas ofertës

Fjali URDHËR NGA përcakton rendin e renditjes së rreshtave në grupin e rezultateve të kthyera nga pyetja. Kjo fjali ka sintaksën e mëposhtme:

Rendi i renditjes është specifikuar në parametrin col_name. Parametri col_number është një specifikues alternativ i renditjes së renditjes që specifikon kolonat në rendin në të cilin ato shfaqen në listën e përzgjedhjes së deklaratës SELECT (1 është kolona e parë, 2 është kolona e dytë, e kështu me radhë). Parametri ASC përcakton renditjen në rend rritës, dhe Parametri DESC- duke zbritur. Parazgjedhja është ASC.

Emrat e kolonave në klauzolën ORDER BY nuk duhet të jenë në listën e kolonave të zgjedhura. Por kjo nuk vlen për pyetjet SELECT DISTINCT, sepse në pyetje të tilla, emrat e kolonave të specifikuara në klauzolën ORDER BY duhet gjithashtu të specifikohen në listën e kolonave të zgjedhura. Përveç kësaj, kjo klauzolë nuk mund të përmbajë emra kolonash nga tabelat që nuk janë të listuara në klauzolën FROM.

Siç mund ta shihni nga sintaksa e klauzolës ORDER BY, grupi i rezultateve mund të renditet në kolona të shumta. Ky renditje tregohet në shembullin e mëposhtëm:

Ky shembull zgjedh numrat e departamenteve dhe mbiemrat dhe emrat e punonjësve për punonjësit, numri i personelit të të cilëve është më pak se 20,000, dhe rendit sipas mbiemrit dhe emrit. Rezultati i kësaj pyetje është:

Kolonat në klauzolën ORDER BY mund të specifikohen jo me emrat e tyre, por me renditje në listën e përzgjedhur. Prandaj, fjalia në shembullin e mësipërm mund të rishkruhet si më poshtë:

Kjo mënyrë alternative e specifikimit të kolonave sipas pozicionit të tyre në vend të emrave të tyre zbatohet nëse kriteri i renditjes përmban një funksion agregat. (Një mënyrë tjetër është përdorimi i emrave të kolonave, të cilët më pas shfaqen në klauzolën ORDER BY.) Megjithatë, në klauzolën ORDER BY, rekomandohet që kolonat të specifikohen me emrat e tyre dhe jo me numra, për ta bërë më të lehtë përditësimin e pyetni nëse kolonat duhet të shtohen ose hiqen nga lista e përzgjedhur. Specifikimi i kolonave në klauzolën ORDER BY me numrat e tyre tregohet në shembullin më poshtë:

PËRDORIMI SampleDb; SELECT Numri i projektit, COUNT(*) "Numri i punonjësve" NGA Works_on GROUP BY ProjectNumber RENDOSJE NGA 2 DESC;

Këtu, për secilin projekt, zgjidhet numri i projektit dhe numri i punonjësve që marrin pjesë në të, duke renditur rezultatin në rend zbritës sipas numrit të punonjësve.

Transact-SQL vendos vlerat NULL në fillim të listës kur renditet në rend rritës dhe në fund të listës kur renditet në rend zbritës.

Përdorimi i klauzolës ORDER BY për të faqezuar rezultatet

Shfaqja e rezultateve të pyetjeve në faqen aktuale ose mund të zbatohet në aplikacionin e përdoruesit, ose serveri i bazës së të dhënave mund të udhëzohet ta bëjë këtë. Në rastin e parë, të gjitha rreshtat e bazës së të dhënave dërgohen në aplikacion, detyra e të cilit është të zgjedhë rreshtat e kërkuar dhe t'i shfaqë ato. Në rastin e dytë, vetëm rreshtat e kërkuar për faqen aktuale zgjidhen dhe shfaqen nga ana e serverit. Siç mund ta prisni, gjenerimi i faqeve nga ana e serverit zakonisht ofron performancë më të mirë sepse klientit i dërgohen vetëm rreshtat e nevojshëm për shfaqje.

Për të mbështetur krijimin e faqeve nga ana e serverit, SQL Server 2012 prezanton dy klauzola të reja të deklaratës SELECT: OFFSET dhe FETCH. Zbatimi i këtyre dy fjalive tregohet në shembullin e mëposhtëm. Këtu, nga baza e të dhënave AdventureWorks2012 (që mund ta gjeni në burime), merret ID e biznesit, titulli i punës dhe ditëlindja e të gjitha punonjëseve femra, duke renditur rezultatin sipas titullit të punës në rend rritës. Grupi i rreshtave që rezulton ndahet në faqe me 10 rreshta dhe shfaqet faqja e tretë:

Në një fjali OFFSET specifikon numrin e rreshtave të rezultateve që duhen kapërcyer në rezultatin e shfaqur. Ky numër llogaritet pasi rreshtat të renditen sipas klauzolës ORDER BY. Në një fjali MERR TJETËR specifikon numrin e rreshtave WHERE që përputhen dhe të renditura për t'u kthyer. Parametri i kësaj klauzole mund të jetë një konstante, një shprehje ose rezultat i një pyetjeje tjetër. Klauzola FETCH NEXT është e ngjashme me klauzolën MERRNI SË PARË.

Qëllimi kryesor kur krijohen faqe në anën e serverit është që të jemi në gjendje të implementojmë forma të zakonshme të faqeve duke përdorur variabla. Ju mund ta kryeni këtë detyrë përmes paketës SQL Server.

SELECT deklaratën dhe pronësinë IDENTITY

prona IDENTITET ju lejon të përcaktoni vlerat për një kolonë specifike të tabelës si një numërues automatik në rritje. Kolonat numerike të tipit të të dhënave si TINYINT, SMALLINT, INT dhe BIGINT mund ta kenë këtë veti. Për një kolonë të tillë tabele, motori i bazës së të dhënave gjeneron automatikisht vlera sekuenciale duke filluar nga vlera fillestare e specifikuar. Kështu, vetia IDENTITY mund të përdoret për të gjeneruar vlera numerike njëshifrore për kolonën e zgjedhur.

Një tabelë mund të përmbajë vetëm një kolonë me vetinë IDENTITY. Pronari i tabelës ka aftësinë të specifikojë vlerën fillestare dhe rritjen, siç tregohet në shembullin më poshtë:

PËRDORIMI SampleDb; KRIJO TABELA Produkti (ID INT IDENTITY(10000, 1) JO NULL, Emri NVARCHAR(30) JO NULL, PARA Çmimi) INSERT NË PRODHIM (Emri, Çmimi) VLERAT ("Artikulli 1", 10), ("Artikulli 2", 15) , ("Artikulli 3", 8), ("Artikulli 4", 15), ("Artikulli 5", 40); -- Kthen 10004 SELECT IDENTITYCOL FROM Produkt WHERE Emri = "Product5"; -- Ngjashëm me deklaratën e mëparshme SELECT $identity FROM Product WHERE Emri = "Product5";

Ky shembull fillimisht krijon një tabelë Produkti që përmban një kolonë ID me një veçori IDENTITY. Vlerat në kolonën Id gjenerohen automatikisht nga sistemi, duke filluar nga 10,000 dhe duke u rritur me një për secilën vlerë pasuese: 10,000, 10,001, 10,002, e kështu me radhë.

Disa funksione dhe variabla të sistemit shoqërohen me veçorinë IDENTITY. Për shembull, përdoret shembulli i kodit ndryshorja e sistemit $identity. Siç mund ta shihni nga dalja e këtij kodi, kjo variabël i referohet automatikisht vetisë IDENTITY. Në vend të kësaj, mund të përdorni gjithashtu funksionin e sistemit IDENTITETI.

Vlera fillestare dhe rritja e një kolone me vetinë IDENTITY mund të gjenden duke përdorur funksionet IDENT_SEED dhe IDENT_INCR përkatësisht. Këto funksione zbatohen si më poshtë:

PËRDORIMI SampleDb; SELECT IDENT_SEED ("Produkt"), IDENT_INCR ("Produkt")

Siç është përmendur tashmë, vlerat IDENTITY vendosen automatikisht nga sistemi. Por përdoruesi mund të specifikojë në mënyrë eksplicite vlerat e veta për rreshta të caktuar duke vendosur parametrin IDENTITY_INSERT AKTIV para se të futni një vlerë të qartë:

SET IDENTITY INSERT emrin e tabelës ON

Për shkak se opsioni IDENTITY_INSERT mund të vendoset në çdo vlerë për një kolonë të veçorisë IDENTITY, duke përfshirë një vlerë të dyfishtë, vetia IDENTITY zakonisht nuk zbaton uniken e vlerave të kolonës. Prandaj, kufizimet UNIQUE ose KRYESORE KRYESORE duhet të përdoren për të zbatuar uniken e vlerave të kolonës.

Kur futni vlera në një tabelë pasi IDENTITY_INSERT është aktivizuar, sistemi krijon vlerën tjetër të kolonës IDENTITY, duke rritur vlerën më të madhe aktuale të asaj kolone.

Deklarata CREATE SEQUENCE

Përdorimi i pronës IDENTITY ka disa disavantazhe të rëndësishme, më të rëndësishmet prej të cilave janë këto:

    aplikimi i pronës është i kufizuar në tabelën e specifikuar;

    vlera e re e kolonës nuk mund të merret në asnjë mënyrë tjetër veçse duke e aplikuar atë;

    vetia IDENTITY mund të specifikohet vetëm kur krijohet një kolonë.

Për këto arsye, SQL Server 2012 prezanton sekuenca që kanë të njëjtën semantikë si vetia IDENTITY, por pa të metat e listuara më parë. Në këtë kontekst, një sekuencë është një funksionalitet i bazës së të dhënave që ju lejon të specifikoni vlerat e kundërta për objekte të ndryshme të bazës së të dhënave, të tilla si kolonat dhe variablat.

Sekuencat krijohen duke përdorur udhëzimet KRIJO SEKUENCE. Deklarata CREATE SEQUENCE përcaktohet në standardin SQL dhe mbështetet nga sisteme të tjera të bazës së të dhënave relacionale si IBM DB2 dhe Oracle.

Shembulli më poshtë tregon se si të krijoni një sekuencë në SQL Server:

PËRDORIMI SampleDb; KRIJO SEKUENCE dbo.Sekuenca1 SI NË FILLIM ME 1 RRITJE ME 5 MINVLERË 1 MAXVLERË 256 CIKLE;

Në shembullin e mësipërm, vlerat e Sekuencës 1 gjenerohen automatikisht nga sistemi, duke filluar nga vlera 1 me rritje prej 5 për çdo vlerë pasuese. Kështu, në oferta FILLOështë specifikuar vlera fillestare dhe Oferta RRITJE- hap. (Hapi mund të jetë pozitiv ose negativ.)

Në dy fjalitë e ardhshme fakultative MINVALUES dhe MAXVLERA janë specifikuar vlerat minimale dhe maksimale të objektit të sekuencës. (Vini re se vlera MINVALUE duhet të jetë më e vogël ose e barabartë me vlerën fillestare dhe vlera MAXVALUE nuk mund të jetë më e madhe se kufiri i sipërm i llojit të të dhënave të specifikuar për sekuencën.) Në klauzolën CIKLI tregon se sekuenca përsëritet nga fillimi kur tejkalohet vlera maksimale (ose minimale për një sekuencë me hap negativ). Si parazgjedhje, kjo klauzolë është vendosur në NO CYCLE, që do të thotë se tejkalimi i vlerës maksimale ose minimale të sekuencës shkakton një përjashtim.

Tipari kryesor i sekuencave është pavarësia e tyre nga tabelat, d.m.th. ato mund të përdoren me çdo objekt të bazës së të dhënave siç janë kolonat e tabelës ose variablat. (Kjo veti ka një efekt pozitiv në ruajtjen dhe, për rrjedhojë, në performancën. Një sekuencë specifike nuk ka nevojë të ruhet; ruhet vetëm vlera e fundit e saj.)

Vlerat e reja të sekuencës krijohen me VLERA E TJETËR PËR shprehjet, përdorimi i të cilave tregohet në shembullin e mëposhtëm:

PËRDORIMI SampleDb; -- Kthen 1 ZGJIDH VLERËN TJETËR PËR dbo.sequence1; -- Kthen 6 (hapi tjetër) ZGJIDH VLERËN TJETËR PËR dbo.sequence1;

Ju mund të përdorni shprehjen NEXT VALUE FOR për të caktuar rezultatin e një sekuence në një variabël ose qelizë kolone. Shembulli më poshtë tregon përdorimin e kësaj shprehjeje për të caktuar rezultatet në një kolonë:

PËRDORIMI SampleDb; KRIJO TABELA Produkti (Id INT NOT NULL, Emri NVARCHAR(30) JO NULL, PARA Çmimi) INSERT NË VLERAT E PRODUKTIT (VLERA TJETËR PËR dbo.sequence1, "Product1", 10); INSERT NË VLERAT E PRODUKTIT (VLERA E TJETËR PËR dbo.sequence1, "Product2", 15); --...

Shembulli i mësipërm fillimisht krijon një tabelë të produktit me katër kolona. Më pas, dy deklarata INSERT futin dy rreshta në këtë tabelë. Dy qelizat e para në kolonën e parë do të kenë vlerat 11 dhe 16.

Shembulli i mëposhtëm tregon përdorimin e pamjes së katalogut sys.sekuenca për të parë vlerën aktuale të një sekuence pa e përdorur atë:

Në mënyrë tipike, shprehja NEXT VALUE FOR përdoret në një deklaratë INSERT për të detyruar sistemin të futë vlerat e krijuara. Kjo shprehje mund të përdoret gjithashtu si pjesë e një pyetjeje me shumë rreshta duke përdorur klauzolën OVER.

Për të ndryshuar një veti të një sekuence ekzistuese, përdorni Deklarata ALTER SEQUENCE. Një nga përdorimet më të rëndësishme të kësaj deklarate është me opsionin RISTART WITH, i cili rivendos sekuencën e specifikuar. Shembulli më poshtë tregon përdorimin e deklaratës ALTER SEQUENCE për të rivendosur pothuajse të gjitha vetitë e Sequence1:

PËRDORIMI SampleDb; SEKUENCA NDRYSHIME dbo.sekuenca1 RIFIKONI ME 100 RRITJE ME 50 MINVLERË 50 MAXVLERË 200 PA CIKLI;

Fshini një sekuencë duke përdorur udhëzimin SEKUENCA E RËZIMIT.

Set Operatorët

Përveç operatorëve të diskutuar më parë, Transact-SQL mbështet tre operatorë të tjerë të grupeve: UNION, INTERSECT dhe EXCEPT.

Operatori UNION

Operatori UNION kombinon rezultatet e dy ose më shumë pyetjeve në një grup të vetëm rezultatesh që përfshin të gjitha rreshtat që u përkasin të gjitha pyetjeve në bashkim. Prandaj, rezultati i bashkimit të dy tabelave është një tabelë e re që përmban të gjitha rreshtat e përfshirë në njërën nga tabelat origjinale ose në të dyja këto tabela.

Forma e përgjithshme e operatorit UNION duket si kjo:

zgjidhni_1 UNION zgjidhni_2(zgjidh_3])...

Opsionet select_1, select_2, ... janë deklarata SELECT që krijojnë një bashkim. Nëse përdoret opsioni ALL, shfaqen të gjitha rreshtat, duke përfshirë dublikatat. Në operatorin UNION, parametri ALL ka të njëjtin kuptim si në listën e përzgjedhjes SELECT, me një ndryshim: për listën e përzgjedhjes SELECT, ky parametër aplikohet si parazgjedhje, por për operatorin UNION duhet të specifikohet në mënyrë eksplicite.

Në formën e saj origjinale, baza e të dhënave SampleDb nuk është e përshtatshme për të demonstruar përdorimin e operatorit UNION. Prandaj, ky seksion krijon një tabelë të re EmployeeEnh që është identike me tabelën ekzistuese Employee, por ka një kolonë shtesë City. Kjo kolonë tregon se ku jetojnë punonjësit.

Krijimi i tabelës EmployeeEnh na ofron një mundësi për të demonstruar përdorimin e klauzolës në deklaratën SELECT. Deklarata SELECT INTO kryen dy operacione. Së pari, krijohet një tabelë e re me kolonat e listuara në listën e përzgjedhjes SELECT. Pastaj rreshtat e tabelës origjinale futen në tabelën e re. Emri i tabelës së re është specifikuar në klauzolën INTO, dhe emri i tabelës burimore është specifikuar në klauzolën FROM.

Shembulli më poshtë tregon krijimin e tabelës EmployeeEnh nga tabela Employee:

PËRDORIMI SampleDb; SELECT * INTO EmployeeEnh FROM Employee; ALTER TABLE PunonjësEnh SHTO Qyteti NCHAR(40) NULL;

Në këtë shembull, deklarata SELECT INTO krijon tabelën EmployeeEnh, fut të gjitha rreshtat nga tabela burimore Employee në të dhe më pas deklarata ALTER TABLE shton kolonën City në tabelën e re. Por kolona e shtuar Qyteti nuk përmban asnjë vlerë. Vlerat në këtë kolonë mund të futen përmes Management Studio ose duke përdorur kodin e mëposhtëm:

PËRDORIMI SampleDb; PËRDITËSOJE EmployeeEnh SET Qyteti="Kazan" WHERE Id=2581; PËRDITËSOJE EmployeeEnh SET City = "Moscow" WHERE Id = 9031; PËRDITËSOJE EmployeeEnh SET Qyteti = "Yekaterinburg" WHERE Id = 10102; UPDATE EmployeeEnh SET City = "Saint Petersburg" WHERE Id = 18316; UPDATE EmployeeEnh SET City = "Krasnodar" WHERE Id = 25348; UPDATE EmployeeEnh SET City="Kazan" WHERE Id=28559; UPDATE EmployeeEnh SET City="Perm" WHERE Id=29346;

Tani jemi gati të demonstrojmë përdorimin e deklaratës UNION. Shembulli më poshtë tregon një pyetje për të krijuar një bashkim midis tabelave EmployeeEnh dhe Department duke përdorur këtë deklaratë:

PËRDORIMI SampleDb; ZGJIDH Qyteti AS "Qytet" NGA PunonjësitEnh UNION ZGJEDH vendndodhjen NGA Departamenti;

Rezultati i kësaj pyetje është:

Vetëm tabelat e përputhshme mund të bashkohen duke përdorur deklaratën UNION. Me tabela të pajtueshme, nënkuptojmë që të dyja listat e kolonave në përzgjedhje duhet të përmbajnë të njëjtin numër kolonash dhe se kolonat përkatëse duhet të kenë lloje të dhënash të përputhshme. (Për sa i përket përputhshmërisë, llojet e të dhënave INT dhe SMALLINT nuk janë të pajtueshme.)

Rezultati i një bashkimi mund të porositet vetëm duke përdorur klauzolën ORDER BY në deklaratën e fundit SELECT, siç tregohet në shembullin më poshtë. Klauzolat GROUP BY dhe HAVING mund të përdoren me deklarata individuale SELECT, por jo brenda vetë bashkimit.

Pyetja në këtë shembull merr punonjësit që ose punojnë në departamentin d1 ose kanë filluar të punojnë në projekt përpara 1 janarit 2008.

Operatori UNION mbështet opsionin ALL. Kur përdoret ky opsion, dublikatat nuk hiqen nga grupi i rezultateve. Një operator OR mund të përdoret në vend të një operatori UNION nëse të gjitha deklaratat SELECT të bashkuara nga një ose më shumë operatorë UNION i referohen të njëjtës tabelë. Në këtë rast, grupi i deklaratave SELECT zëvendësohet nga një deklaratë e vetme SELECT me një grup deklaratash OR.

Deklaratat KRYQËZOJNË dhe PËRVEÇ

Dy operatorë të tjerë për të punuar me grupe, KRYQËZOHET dhe PËRVEÇ, përcaktoni përkatësisht kryqëzimin dhe ndryshimin. Nën kryqëzimin në këtë kontekst është një grup rreshtash që u përkasin të dy tabelave. Dhe ndryshimi i dy tabelave përcaktohet si të gjitha vlerat që i përkasin tabelës së parë dhe nuk janë të pranishme në të dytën. Shembulli i mëposhtëm tregon përdorimin e deklaratës INTERSECT:

Transact-SQL nuk e mbështet përdorimin e opsionit ALL as me deklaratën INTERSECT ose me deklaratën EXCEPT. Përdorimi i deklaratës EXCEPT tregohet në shembullin e mëposhtëm:

Mbani në mend se këta tre operatorë grupesh kanë përparësi të ndryshme ekzekutimi: operatori INTERSECT ka përparësinë më të lartë, i ndjekur nga operatori EXCEPT dhe operatori UNION ka përparësinë më të ulët. Moskujdesi ndaj përparësisë së ekzekutimit kur përdorni shumë operatorë të grupeve të ndryshme mund të çojë në rezultate të papritura.

Shprehjet RASTE

Në fushën e programimit të aplikacionit të bazës së të dhënave, ndonjëherë është e nevojshme të modifikohet prezantimi i të dhënave. Për shembull, njerëzit mund të ndahen duke i koduar sipas përkatësisë së tyre sociale, duke përdorur vlerat 1, 2 dhe 3, që tregojnë përkatësisht meshkuj, femra dhe fëmijë. Kjo teknikë programimi mund të zvogëlojë kohën e nevojshme për zbatimin e programit. Shprehje RASTE Gjuha Transact-SQL e bën të lehtë zbatimin e këtij lloji të kodimit.

Ndryshe nga shumica e gjuhëve programuese, CASE nuk është një deklaratë, por një shprehje. Prandaj, një shprehje CASE mund të përdoret pothuajse kudo ku gjuha Transact-SQL lejon përdorimin e shprehjeve. Shprehja CASE ka dy forma:

    një shprehje e thjeshtë RAST;

    shprehja e kërkimit RAST.

Sintaksa për një shprehje të thjeshtë CASE është si më poshtë:

Një deklaratë me një shprehje të thjeshtë CASE fillimisht kërkon listën e të gjitha shprehjeve në klauzola KUR shprehja e parë që përputhet me shprehjen_1 dhe më pas ekzekuton atë përkatëse PASTAJ klauzolë. Nëse nuk ka asnjë shprehje që përputhet në listën WHEN, atëherë klauzolë TJETËR.

Sintaksa për një shprehje kërkimi CASE është:

Në këtë rast, kërkohet kushti i parë i përputhjes dhe më pas ekzekutohet klauzola përkatëse THEN. Nëse asnjë nga kushtet nuk përputhet me kërkesat, klauzola ELSE ekzekutohet. Përdorimi i shprehjes së kërkimit CASE tregohet në shembullin e mëposhtëm:

PËRDORIMI SampleDb; ZGJIDH emrin e projektit, RASTIN KUR Buxheti > 0 DHE Buxheti 100000 DHE Buxheti 150000 DHE Buxheti

Rezultati i kësaj pyetje është:

Ky shembull peshon buxhetet e të gjitha projekteve dhe shfaq peshat e tyre të llogaritura së bashku me emrat e tyre përkatës të projekteve.

Shembulli më poshtë tregon një mënyrë tjetër për të përdorur një shprehje CASE, ku klauzola WHEN përmban nënpyetje që janë pjesë e shprehjes:

PËRDORIMI SampleDb; SELECT Emri i Projektit, RASTI WHEN p1.Budget (SELECT AVG(p2.Budget) FROM Project p2) PAS "Mbi mesataren" FUND "Kategoria e buxhetit" NGA Projekti p1;

Rezultati i kësaj pyetjeje është si më poshtë:

Përdorimi i funksioneve agregate

SQL përcakton shumë funksione të integruara të kategorive të ndryshme, ndër të cilat një vend të veçantë zënë funksionet agregate që funksionojnë në vlerat e kolonave të rreshtave të shumëfishtë dhe kthejnë një vlerë të vetme. Argumentet e funksioneve agregate mund të jenë si kolona të tabelave ashtu edhe rezultatet e shprehjeve mbi to. Funksionet agregate mund të përfshihen vetë në shprehje të tjera aritmetike. Tabela e mëposhtme liston funksionet standarde të përbashkëta unare më të përdorura.


Formati i përgjithshëm i një funksioni agregat unar është si më poshtë:

emri_funksioni ([ALL | TË NDARSHME] shprehje)

ku DISTINCT specifikon se funksioni duhet të marrë në konsideratë vetëm vlera të veçanta të argumentit, dhe ALL specifikon të gjitha vlerat, duke përfshirë dublikatat (ky është parazgjedhja). Për shembull, funksioni AVG me fjalën kyçe DISTINCT për rreshtat e kolonave me vlera 1, 1, 1 dhe 3 do të kthejë 2, por me fjalën kyçe ALL, do të kthejë 1.5.

Funksionet agregate përdoren në klauzolat SELECT dhe HAVING. Këtu do të shikojmë përdorimin e tyre në klauzolën SELECT. Në këtë rast, shprehja në argumentin e funksionit zbatohet në të gjitha rreshtat e tabelës hyrëse të klauzolës SELECT. Gjithashtu, nuk mund të përdorni të dy funksionet e përmbledhura dhe kolonat e tabelës (ose shprehjet me to) në një klauzolë SELECT, përveç nëse ka një klauzolë GRUPI SIPAS, të cilën do ta shohim në seksionin vijues.

Funksioni COUNT ka dy formate. Në rastin e parë, numri i rreshtave të tabelës hyrëse kthehet, në rastin e dytë, numri i vlerave të argumentit në tabelën hyrëse:

  • COUNT(*)
  • COUNT (shprehje)

Mënyra më e thjeshtë për të përdorur këtë funksion është të numëroni numrin e rreshtave në një tabelë (qoftë të gjitha ose ato që plotësojnë një kusht të caktuar). Për këtë përdoret varianti i parë i sintaksës.

Pyetje: Numri i llojeve të produkteve, informacioni për të cilin është i disponueshëm në bazën e të dhënave.

ZGJIDH NUMRIN(*) SI "Numri i produkteve"

NGA Produkti

Në variantin e dytë të sintaksës së funksionit COUNT, emri i një kolone të vetme mund të përdoret si argument. Në këtë rast, numërohet numri ose i të gjitha vlerave në këtë kolonë të tabelës hyrëse, ose vetëm atyre që nuk përsëriten (kur përdorni fjalën kyçe DISTINCT).

Pyetje: Numri i emrave të ndryshëm të përfshirë në tabelën e Klientit.

ZGJIDH NUMRIN (EMRI I NDRYSHËM)

NGA Klienti

Përdorimi i funksioneve të tjera agregate unare është i ngjashëm me COUNT, përveç se për funksionet MIN dhe MAX, përdorimi i fjalëve kyçe DISTINCT dhe ALL nuk ka kuptim. Me funksionet COUNT, MAX dhe MIN, fushat e karaktereve mund të përdoren gjithashtu përveç fushave numerike. Nëse argumenti i funksionit agregat nuk përmban vlera, funksioni COUNT kthen 0 dhe të gjithë të tjerët kthejnë NULL.

ZGJIDH MAX (Data e porositjes)

NGA

WHERE Orddata"1.09.2010"

Detyrë për punë të pavarur: Formuloni pyetje në gjuhën SQL për zgjedhjen e të dhënave të mëposhtme:

  • Kostoja totale e të gjitha porosive;
  • Numri i qyteteve të veçanta të përfshira në tabelën e Klientit.

Ata mund të kryejnë përpunim grupor të përgjithësuar të vlerave të fushës. Kjo bëhet duke përdorur funksionet agregate. Funksionet agregate prodhojnë një vlerë të vetme për të gjithë grupin e tabelës. SQL ofron funksionet e mëposhtme agregate:

  • COUNT– numëron numrin e rreshtave të tabelës me vlera jo NULL të fushës të specifikuar si argument.
  • SHUMË– llogarit shumën aritmetike të të gjitha vlerave të zgjedhura të fushës së dhënë.
  • AVG– mesatarizon të gjitha vlerat e zgjedhura të fushës së dhënë.
  • MAX- Shfaq vlerën më të madhe të të gjitha vlerave të zgjedhura të fushës së dhënë.
  • MIN– Shfaq vlerën më të vogël të të gjitha vlerave të zgjedhura në fushën e dhënë.

    Përdorimi i funksioneve agregate

    Funksionet e grumbulluara përdoren si emrat e fushave në klauzolën SELECT të një pyetjeje, me një përjashtim: ata marrin emrat e fushave si argument. Vetëm fushat numerike mund të përdoren me SHUMË dhe AVG. ME COUNT, MAX, dhe MIN mund të përdoren edhe fushat numerike edhe ato të karaktereve. Kur përdoret me fushat e karaktereve MAX dhe MIN do t'i përkthejë ato në ekuivalentin e tyre ASCII. Do të thotë se MIN do të zgjedhë të parën, dhe MAX vlera e fundit sipas rendit alfabetik.

    Për të gjetur shumën totale të shitjeve në tabelën e shitjeve, duhet të shkruajmë pyetjen e mëposhtme:

    ZGJIDH SHUMËN(Sumën) FROM Shitet

    Si rezultat, marrim:

    Ky pyetës ka numëruar numrin e vlerave jo bosh në fushën SNum të tabelës Shitet. Nëse e rishkruajmë pyetjen si më poshtë:

    SELECT COUNT(Data) FROM Shitet

    Pastaj si rezultat marrim:

    NUMRI I datës
    4

    Rezultate të ndryshme të pyetjeve kur llogaritet në dukje e njëjta gjë merren sepse një nga vlerat e fushës SDate ka një vlerë boshe ( I PAVLEFSHËM). Kini kujdes kur përdorni kërkesa të tilla.

Artikujt kryesorë të lidhur