Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • në shtëpi
  • Këshilla
  • Funksionet agregate dhe rezultatet e pyetjeve në sql. Përdorimi i funksioneve të përmbledhura SQL

Funksionet agregate dhe rezultatet e pyetjeve në sql. Përdorimi i funksioneve të përmbledhura SQL

GRUPI PËR klauzolë(Deklarata SELECT) ju lejon të gruponi të dhënat (rreshtat) sipas vlerës së një kolone ose kolonave ose shprehjeve të shumta. Rezultati do të jetë një grup rreshtash përmbledhës.

Secila kolonë në listën e përzgjedhur duhet të jetë e pranishme në klauzolën GROUP BY, përjashtimet e vetme janë konstantet dhe kolonat - operandët e funksioneve agregate.

Një tabelë mund të grupohet sipas çdo kombinimi të kolonave të saj.

Funksionet agregate përdoren për të marrë një vlerë totale të vetme nga një grup rreshtash. Të gjithë funksionet agregate kryejnë llogaritjet në një argument të vetëm, i cili mund të jetë ose një kolonë ose një shprehje. Çdo funksion agregat vlerësohet në një vlerë konstante që shfaqet në një kolonë të veçantë në rezultat.

Funksionet e përmbledhura janë të specifikuara në listën e kolonave të një deklarate SELECT, e cila mund të përmbajë gjithashtu një klauzolë GROUP BY. Nëse deklarata SELECT nuk ka një klauzolë GROUP BY, dhe lista e kolonave të përzgjedhura përmban, nga të paktën, një funksion agregat, atëherë ai nuk duhet të përmbajë kolona të thjeshta. Nga ana tjetër, një listë e zgjedhur kolonash mund të përmbajë emra kolonash që nuk janë argumente për funksionin agregat nëse ato kolona përdoren si argumente për klauzolën GROUP BY.

Nëse pyetja përmban një klauzolë WHERE, atëherë funksionet agregate llogaritin një vlerë për rezultatet e përzgjedhjes.

Funksionet agregate MIN dhe MAX llogarit më të voglin dhe vlerën më të madhe kolonë përkatësisht. Argumentet mund të jenë numra, vargje dhe data. Të gjitha vlerat NULL hiqen para llogaritjes (d.m.th., nuk merren parasysh).

Funksioni agregat SUM llogarit shuma totale vlerat e kolonës. Vetëm numrat mund të jenë argumente. Përdorimi i parametrit DISTINCT heq çdo vlerë të kopjuar në kolonë përpara aplikimit Funksionet SUM... Po kështu, hiqni të gjitha vlerat NULL përpara se të aplikoni këtë funksion agregat.

Agregat Funksioni AVG kthen mesataren e të gjitha vlerave në një kolonë. Argumentet gjithashtu mund të jenë vetëm numra, dhe të gjitha vlerat NULL hiqen para vlerësimit.

Funksioni i përmbledhur COUNT ka dy forma të ndryshme:

  • COUNT (col_name) - numëron numrin e vlerave në kolonën col_name, vlerat NULL nuk numërohen
  • COUNT (*) - numëron numrin e rreshtave në tabelë, gjithashtu merren parasysh vlerat NULL

Nëse pyetja përdor fjalën kyçe DISTINCT, të gjitha vlerat e dyfishta të kolonës hiqen përpara se të përdoret funksioni COUNT.

COUNT_BIG funksion i njëjti funksion si COUNT. Dallimi i vetëm midis të dyjave është në llojin e rezultatit që ata japin: COUNT_BIG kthen gjithmonë vlera BIGINT, ndërsa COUNT kthen vlera të dhënash INTEGER.

V Duke pasur ofertë përcakton një kusht që zbatohet në një grup rreshtash. Ka të njëjtin kuptim për grupet e rreshtave si klauzola WHERE për përmbajtjen e tabelës përkatëse (WHERE zbatohet para grupimit, HAVING pas).

Mund të prodhojë të përgjithësuar përpunimi në grup vlerat e 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- kryen mesataren e të gjitha vlerave të zgjedhura të kësaj fushe.
  • MAX- shfaq vlerën më të madhe të të gjitha vlerave të zgjedhura për këtë fushë.
  • MIN- Nxjerr vlerën më të vogël të të gjitha vlerave të zgjedhura për këtë fushë.

    Përdorimi i funksioneve agregate

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

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

    SELECT SUM (Sum) 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ë kërkesën si më poshtë:

    SELECT COUNT (Data) FROM Shitet

    Pastaj si rezultat marrim:

    NUMRI I datës
    4

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

Si mund të zbuloj numrin e modeleve të PC-ve të prodhuara nga një shitës i caktuar? Si të përcaktohet çmimi mesatar për kompjuterët që kanë të njëjtën specifikimet? Këto dhe shumë pyetje të tjera që lidhen me disa informacion statistikor, ju mund të merrni përgjigje me funksionet përmbledhëse (agregate).... Standardi parashikon funksionet e mëposhtme agregate:

Të gjitha këto funksione kthejnë një vlerë të vetme. Në këtë rast, funksionet COUNT, MIN dhe MAX janë të zbatueshme për çdo lloj të dhënash, ndërsa SHUMË dhe AVG përdoren vetëm për fushat numerike. Dallimi midis funksionit COUNT (*) dhe COUNT (<имя поля>) është se e dyta nuk merr parasysh vlerat NULL gjatë llogaritjes.

Shembull. Gjeni çmimin minimal dhe maksimal për kompjuterët personalë:

Shembull. Gjeni numrin e kompjuterëve të disponueshëm nga prodhuesi A:

Shembull. Nëse jemi të interesuar për sasinë modele të ndryshme prodhuar nga prodhuesi A, pyetja mund të formulohet si më poshtë (duke përdorur faktin se në tabelën e produktit çdo model regjistrohet një herë):

Shembull. Gjeni numrin e modeleve të ndryshme të disponueshme nga prodhuesi A. Pyetja është e ngjashme me atë të mëparshme, në të cilën kërkohej të përcaktohej numri total modelet e prodhuara nga prodhuesi A. Këtu duhet të gjeni edhe numrin e modeleve të ndryshme në tabelën e PC (dmth të disponueshëm në treg).

Për të siguruar që përdoren vetëm vlera unike kur merren tregues statistikorë, kur argumenti i funksioneve agregate mund të përdoret Parametri DISTINCT... Një tjetër parametri ALLështë parazgjedhja dhe supozon që të gjitha vlerat e kthyera në kolonë janë numëruar. Operator,

Nëse duhet të marrim numrin e modeleve të PC-ve të prodhuara çdo prodhuesi, do t'ju duhet të përdorni GRUPI PËR klauzolë në vijim sintaksor KU klauzolat.

GRUPI PËR klauzolë

GRUPI PËR klauzolë përdoret për të përcaktuar grupet e linjave të daljes në të cilat mund të aplikohen funksionet e përgjithshme (COUNT, MIN, MAX, AVG dhe SUM)... Nëse kjo klauzolë mungon dhe përdoren funksionet e përgjithshme, atëherë të gjitha kolonat me emrat e përmendur në ZGJIDH duhet të përfshihen në funksionet agregate, dhe këto funksione do të aplikohen në të gjithë grupin e rreshtave që plotësojnë kallëzuesin e pyetjes. Përndryshe, të gjitha kolonat e listës SELECT, nuk përfshihen në funksionet agregate, duhet të specifikohet në klauzolë GRUPI SIPAS... Si rezultat, të gjitha linjat e daljes së pyetjes ndahen në grupe të karakterizuara nga të njëjtat kombinime vlerash në këto kolona. Pas kësaj, funksionet agregate do të aplikohen për secilin grup. Vini re se për GROUP BY të gjitha vlerat NULL trajtohen si të barabarta, d.m.th. kur grupohen nga një fushë që përmban vlera NULL, të gjitha rreshtat e tillë do të bien në një grup.
Nëse nëse ka një klauzolë GROUP BY, në klauzolën SELECT nuk ka funksione agregate, atëherë pyetja thjesht do të kthejë një rresht nga secili grup. Kjo veçori, së bashku me fjalën kyçe DISTINCT, mund të përdoret për të eliminuar rreshtat e dyfishta në grupin e rezultateve.
Le të hedhim një vështrim në një shembull të thjeshtë:
SELECT model, COUNT (modeli) AS Qty_model, AVG (çmimi) AS çmimi mesatar
NGA PC
GRUPI SIPAS modelit;

Në këtë kërkesë për çdo model PC përcaktohet numri i tyre dhe kosto mesatare... Të gjitha linjat me të njëjtat vlera modeli (numri i modelit) formojnë një grup, dhe dalja SELECT llogarit numrin e vlerave dhe vlerat mesatare të çmimeve për secilin grup. Kërkesa do të rezultojë në tabelën e mëposhtme:
model Sasia_model Çmimi_mesatar
1121 3 850.0
1232 4 425.0
1233 3 843.33333333333337
1260 1 350.0

Nëse SELECT kishte një kolonë me një datë, atëherë do të ishte e mundur të llogariteshin këta tregues për çdo datë specifike. Për ta bërë këtë, duhet të shtoni një datë si një kolonë grupimi, dhe më pas do të llogariten funksionet e përmbledhura për çdo kombinim vlerash (model-datë).

Ka disa specifike rregullat për kryerjen e funksioneve agregate:

  • Nëse si rezultat i pyetjes asnjë rresht nuk është marrë(ose më shumë se një rresht për një grup të caktuar), atëherë mungojnë të dhënat fillestare për llogaritjen e ndonjë prej funksioneve agregate. Në këtë rast, rezultati i ekzekutimit të funksioneve COUNT do të jetë zero, dhe rezultati i të gjitha funksioneve të tjera do të jetë NULL.
  • Argumenti funksioni agregat vetë nuk mund të përmbajë funksione agregate(funksioni nga funksioni). ato. në një pyetje të vetme, ju nuk mund, të themi, të merrni maksimumin e mesatareve.
  • Rezultati i ekzekutimit të funksionit COUNT është numër i plotë(SHUMË I PLOTË). Funksionet e tjera agregate trashëgojnë llojet e të dhënave të vlerave që përpunohen.
  • Nëse, gjatë ekzekutimit të funksionit SUM, është marrë një rezultat që tejkalon vlerën maksimale të llojit të të dhënave të përdorur, gabim.

Pra, nëse kërkesa nuk përmban GRUP SIPAS klauzolave, pastaj funksionet agregate të përfshira në Klauzola SELECT, ekzekutohen në të gjitha linjat e pyetjeve që rezultojnë. Nëse kërkesa përmban GRUPI PËR klauzolë, çdo grup rreshtash që ka të njëjtat vlera të grupit të kolonave ose kolonave të specifikuara në GRUPI PËR klauzolë, përbën një grup, dhe funksionet agregate kryhen për secilin grup veç e veç.

Klauzola e PASJES

Nëse Klauzola WHERE përcakton një kallëzues për filtrimin e rreshtave, më pas Duke pasur ofertë aplikuar pas grupimit për të përcaktuar një grup të ngjashëm filtrues kallëzues sipas vlerave funksionet agregate... Kjo klauzolë është e nevojshme për të testuar vlerat që janë marrë duke përdorur funksioni agregat jo nga linja të veçanta të burimit të regjistrimit të përcaktuar në Klauzola NGA, dhe nga grupe të linjave të tilla... Prandaj, një kontroll i tillë nuk mund të përfshihet Klauzola WHERE.

Nënseksionet e mëposhtme përshkruajnë sugjerime të tjera SELECT deklaratë që mund të përdoret në pyetje, si dhe në funksione agreguese dhe grupe operatorësh. Më lejoni t'ju kujtoj ky moment ne 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 se si këto klauzola mund të përdoren në lidhje me funksionet e përgjithshme që mbështeten në Transact. -SQL.

GRUPI PËR klauzolë

Fjali GRUP NGA grupon grupin e rreshtave të zgjedhur për të marrë një grup rreshtash përmbledhës bazuar në vlerat e një ose më shumë kolonave ose shprehjeve. Një rast i thjeshtë përdorimi për klauzolën 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 janë kampionuar dhe grupuar.

Në shembullin e mësipërm, klauzola GROUP BY krijon një grup të veçantë per te gjithe vlerat e mundshme(duke përfshirë vlerë zero) 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ërzgjedhur të 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 i mëposhtëm tregon grupimin e rreshtave në tabelën Works_on nga dy kolona:

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

Rezultati i kësaj pyetjeje:

Bazuar në rezultatet e pyetjes, mund të shihni se ka nëntë grupe me kombinime të ndryshme të numrit dhe titullit 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 e shumës. Të gjitha funksionet e përgjithshme mund të ndahen në kategoritë e mëposhtme:

    funksionet e zakonshme të agregatit;

    funksionet e agregatit statistikor;

    funksionet e përgjithshme të përcaktuara nga përdoruesi;

    funksionet e agregatit analitik.

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

Funksionet e rregullta agregate

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.) Çdo funksion agregat vlerësohet në një vlerë konstante që shfaqet në një kolonë të veçantë rezultati.

Funksionet e përmbledhura janë të specifikuara në listën e kolonave të një deklarate SELECT, e cila mund të përmbajë gjithashtu një klauzolë GROUP BY. Nëse deklarata SELECT nuk përfshin një klauzolë GROUP BY, dhe lista e kolonave të përzgjedhjes përmban të paktën një funksion agregat, atëherë ajo nuk duhet të përmbajë kolona të thjeshta (përveç kolonave të përdorura 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 Punonjës;

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

Argumenti i funksionit agregat mund të paraprihet nga një nga dy të mundshmet fjalë kyçe:

TE GJITHA

Tregon që llogaritjet kryhen në të gjitha vlerat në kolonë. Ky është standardi.

TË DAKTUAR

Tregon se vetëm vlerat unike kolonë.

Funksionet agregate MIN dhe MAX

Funksionet agregate MIN dhe MAX llogaritin respektivisht vlerat më të vogla dhe më të mëdha në një kolonë. Nëse pyetja përmban një klauzolë WHERE, funksionet MIN dhe MAX kthejnë vlerat më të vogla dhe më të mëdha të rreshtit që përputhen me 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 "Minimum Id value" FROM Employee;

Rezultati i dhënë në shembullin e mësipërm nuk është shumë informues. Për shembull, mbiemri i punonjësit që zotëron këtë numër nuk dihet. Por ju nuk mund ta merrni këtë mbiemër në mënyrën e zakonshme, sepse, siç u përmend më herët, nuk mund të specifikoni në mënyrë eksplicite kolonën Mbiemri. Për të marrë mbiemrin e këtij punonjësi së bashku me numrin më të ulët të personelit të punonjësit, 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ë pranojnë 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 të përkohshme të tipit datë, vlera më e vogël e kolonës do të jetë më e madhe datë e hershme, dhe më i fundit është më i madhi.

Fjala kyçe DISTINCT mund të përdoret me funksionet MIN dhe MAX. Të gjitha vlerat NULL hiqen nga kolonat e tyre të argumenteve përpara se të përdorni funksionet e përgjithshme MIN dhe MAX.

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 total" NGA Projekti;

Ky shembull llogarit buxhetet totale për të gjitha projektet. 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 totalin e 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; ZGJIDH SHUMËN (Buxhet) "Buxheti total" NGA GRUP E PROJEKTIT NGA ();

Përdorimi i parametrit DISTINCT heq çdo vlerë të kopjuar në kolonë përpara se të aplikoni funksionin SUM. Po kështu, hiqni të gjitha vlerat NULL përpara se të aplikoni këtë funksion agregat.

Funksioni agregat 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. Të gjitha vlerat NULL hiqen nga argumenti përpara se të zbatohet funksioni AVG.

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

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

Këtu llogaritet mesatarja vlera aritmetike buxhet për të gjitha buxhetet.

Përmbledh funksionet COUNT dhe COUNT_BIG

Agregat COUNT funksion ka dy forma të ndryshme:

COUNT (col_name) COUNT (*)

Forma e parë e funksionit numëron numrin e vlerave në kolonën col_name. Nëse pyetja përdor fjalën kyçe DISTINCT, të gjitha vlerat e dyfishta të kolonës hiqen përpara se të përdoret funksioni COUNT. Kjo formë e funksionit COUNT nuk merr parasysh vlerat NULL kur numëron numrin e vlerave të kolonës.

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) "Punë 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 pyetjeje:

Siç mund ta shihni nga pyetja në shembull, vlerat NULL nuk u morën parasysh nga funksioni COUNT. (Shuma e të gjitha vlerave në kolonën e punës është 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 pyetjes me funksionin COUNT (*) përmban një klauzolë WHERE me një kusht, funksioni kthen numrin e rreshtave që plotësojnë kushtin e specifikuar. Ndryshe nga versioni i parë i funksionit COUNT, forma e dytë nuk i injoron vlerat NULL sepse ky funksion funksionon në vargje, 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 (*) "Nevojitet punëtorë" FROM Works_on GROUP BY Job;

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

COUNT_BIG funksion i njëjti funksion si COUNT. Dallimi i vetëm midis të dyjave është në llojin e rezultatit që ata japin: COUNT_BIG kthen gjithmonë vlera BIGINT, ndërsa COUNT kthen vlera të dhënash INTEGER.

Funksionet e agregatit statistikor

Funksionet e mëposhtme përbëjnë grupin e funksioneve agregate statistikore:

VAR

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

VARP

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

STDEV

Llogarit devijimin standard (i cili llogaritet si Rrenja katrore nga varianca përkatëse) e të gjitha vlerave të kolonës ose shprehjes.

STDEVP

Llogarit devijimin standard të mbledhjes 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ë plotësojnë funksionet e përgjithshme 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 në detaje më vonë.

Klauzola e PASJES

Në një fjali DUKE përcakton një kusht që zbatohet në një grup rreshtash. Kështu, kjo klauzolë ka të njëjtin kuptim për grupet e rreshtave si fjalia WHERE për përmbajtjen e tabelës përkatëse. Sintaksë DUKE oferta tjetër:

DUKE gjendje

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

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

PËRDORIMI SampleDb; - Kthen "p3" ZGJIDH numrin e projektit NGA Works_on GROUP BY ProjectNumber HAVING COUNT (*)

Në këtë shembull, sistemi përdor klauzolën GROUP BY për të grupuar të gjitha rreshtat sipas vlerave në kolonën Numri i projektit. Më pas 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; - Do të kthejë "Konsulent" ZGJIDH Punë NGA Works_on GRUPI BY Job HAVING Job LIKE "К%";

Ky shembull grupon rreshtat e tabelës Works_on sipas titullit të punës dhe eliminon punët që nuk fillojnë me shkronjën "K".

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

RENDI SIPAS klauzolës

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

Rendi i renditjes është specifikuar në parametrin col_name. Col_number është një tregues alternativ i renditjes që identifikon 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 një rend rritës, dhe Parametri DESC- në rrjedhën e poshtme. 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 si SELECT DISTINCT, pasi në pyetje të tilla, emrat e kolonave të specifikuara në klauzolën ORDER BY duhet të shfaqen gjithashtu 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ë specifikuara në klauzolën FROM.

Siç mund ta shihni nga sintaksa e klauzolës ORDER BY, renditja e grupit të rezultateve mund të bëhet 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, si dhe renditet sipas mbiemrit dhe emrit. Rezultati i kësaj pyetjeje:

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

Të tillë mënyrë alternative përcaktimi i kolonave sipas pozicionit të tyre në vend të emrave përdoret 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 shfaqen më pas në klauzolën RENDI SIPAS.) Megjithatë, në klauzolën ORDER BY, rekomandohet që të specifikoni kolonat me emrat e tyre dhe jo me numra, për ta bërë më të lehtë përditësimin e pyetjes. nëse keni nevojë të shtoni ose hiqni kolona në listën e përzgjedhur. Specifikimi i kolonave në klauzolën ORDER BY me numrat e tyre tregohet në shembullin më poshtë:

PËRDORIMI SampleDb; ZGJIDH numrin e projektit, COUNT (*) "Numri i punonjësve" NGA Works_on GRUPI SIPAS Numri i projektit RENDOSJE NGA 2 DESC;

Këtu, për çdo projekt, zgjidhet numri i projektit dhe numri i punonjësve pjesëmarrës në të, duke renditur rezultatin në rend zbritës me numrin e punonjësve.

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

Përdorimi ORDER BY Klauzole për të faqezuar rezultatet

Shfaqja e rezultateve të pyetjeve në faqen aktuale mund të zbatohet ose në aplikim me porosi, ose udhëzoni serverin e bazës së të dhënave 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 merren dhe shfaqen nga ana e serverit. Siç mund të prisni, krijimi i faqeve nga ana e serverit zakonisht ofron performancë më të mirë që nga viti klientit i dërgohen vetëm linjat e nevojshme për shfaqje.

Për të mbështetur krijimin e faqeve nga ana e serverit, SQL Server 2012 prezanton dy klauzola të reja 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 (të cilën mund ta gjeni në burim), nxjerr ID-në e biznesit, titullin e punës dhe ditëlindjen e të gjitha punonjëseve femra, të renditura sipas titullit të punës në rend rritës. Grupi i rreshtave që rezulton ndahet në faqe me 10 rreshta dhe shfaqet një faqe e tretë:

Në një fjali OFFSET specifikon numrin e rreshtave të rezultateve që duhet të kapërcehen në rezultatin e shfaqur. Kjo shumë llogaritet pasi rreshtat janë renditur me klauzolën RENDI SIPAS. Në një fjali MERR TJETËR numri i kënaqshëm Klauzola WHERE dhe rreshtat e renditura do të kthehen. 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. Kjo detyrë mund të realizohet me Paketa SQL Serveri.

SELECT Deklarata dhe prona IDENTITET

prona IDENTITET ju lejon të përcaktoni vlerat për një kolonë specifike të tabelës në formën e një numëruesi automatik në rritje. Kolonat e një lloji të të dhënave numerike 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 me vlerën fillestare të specifikuar. Prandaj, 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 IDENTITET (10000, 1) JO NULL, Emri NVARCHAR (30) JO NULL, PARA ÇMIMI) INSERT NË PRODHIM (Emri, Çmimi) VLERAT ("Produkti1", 10), ("Produkti2", 15) , ("Produkti3", 8), ("Produkti4", 15), ("Produkti5", 40); - Do të kthejë 10004 SELECT IDENTITYCOL FROM Product WHERE Emri = "Product5"; - Analoge me deklaratën e mëparshme ZGJIDHni identitetin e $ FROM Produkti WHERE Emri = "Produkt5";

Ky shembull fillimisht krijon një tabelë Produkti që përmban një kolonë ID me një veçori IDENTITY. Vlerat në kolonën Id krijohen automatikisht nga sistemi, duke filluar nga 10,000 dhe duke u rritur me një hap për çdo vlerë pasuese: 10,000, 10,001, 10,002, etj.

Disa funksione dhe variabla të sistemit shoqërohen me veçorinë IDENTITY. Për shembull, përdoret shembulli i kodit ndryshorja e sistemit $ identitet... Siç mund ta shihni nga rezultatet e ekzekutimit të këtij kodi, kjo variabël i referohet automatikisht veçorisë IDENTITY. Ju gjithashtu mund të përdorni në vend të tyre funksionin e sistemit IDENTITETI.

Vlera fillestare dhe rritja e kolonës 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ç u përmend, vlerat e IDENTITY vendosen automatikisht nga sistemi. Por përdoruesi mund të specifikojë në mënyrë eksplicite vlerat e tyre për vargje të caktuara duke i caktuar parametrit IDENTITY_INSERT vlera ON para futjes së vlerës eksplicite:

SET IDENTITY INSERT emrin e tabelës ON

Për shkak se parametri IDENTITY_INSERT mund të përdoret për të vendosur çdo vlerë, duke përfshirë vlerat e dyfishta, në një kolonë me veçorinë IDENTITY, vetia IDENTITY zakonisht nuk zbaton veçantinë e vlerave të kolonës. Prandaj, kufizimet UNIQUE ose PRIMARY KEY duhet të zbatohen për të zbatuar veçantinë e vlerave të kolonës.

Kur futni vlera në një tabelë pasi keni vendosur IDENTITY_INSERT në aktiv, sistemi krijon vlerën tjetër në kolonën IDENTITY, duke rritur vlerën më të lartë aktuale në atë kolonë.

Deklarata CREATE SEQUENCE

Përdorimi i vetive IDENTITY ka disa të meta të rëndësishme, më të rëndësishmet prej të cilave janë:

    prona është e kufizuar në tabelën e specifikuar;

    vlera e re e kolonës nuk mund të merret në asnjë mënyrë tjetër, përveç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 disavantazhet e listuara më parë. Në këtë kontekst, një sekuencë i referohet funksionalitetit të një baze të dhënash 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ëzimin KRIJO SEKUENCE... Deklarata CREATE SEQUENCE është përcaktuar në Standardi 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.Sekuenca 1 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 me një vlerë prej 1 dhe në rritje prej 5 për çdo vlerë të njëpasnjëshme. Kështu, në klauzolën FILLIM tregohet vlera fillestare dhe në Oferta RRITJE- hap. (Hapi mund të jetë pozitiv ose negativ.)

Në dy fjalitë e ardhshme fakultative MINVALUES dhe MAXVLERA specifikon vlerën minimale dhe maksimale të objektit të sekuencës. (Vini re se MINVALUE duhet të jetë më e vogël ose e barabartë me vlera 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ë 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 krijon 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, aplikimi i të cilit 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 E 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 i mëposhtëm ilustron 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) FUT NE 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ë quajtur Produkt me katër kolona. Më pas, dy deklarata INSERT futin dy rreshta në këtë tabelë. Dy qelizat e para të kolonës së parë do të jenë 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ë udhëzuar 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, aplikoni Deklarata ALTER SEQUENCE... Një nga përdorimet më të rëndësishme për këtë deklaratë është me opsionin RISTART WITH, i cili rivendos sekuencën e specifikuar. Shembulli i mëposhtëm tregon përdorimin e deklaratës ALTER SEQUENCE për të rivendosur pothuajse të gjitha vetitë e Sekuencës1:

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

Sekuenca fshihet duke përdorur udhëzimin SEKUENCA E RËZIMIT.

Vendosni 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. Rrjedhimisht, rezultati i bashkimit të dy tabelave është një tabelë e re që përmban të gjitha rreshtat në njërën ose të dyja tabelat origjinale.

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

select_1 UNION zgjidhni_2 (select_3]) ...

Opsionet select_1, select_2, ... janë deklarata SELECT që krijojnë bashkimin. Nëse përdoret parametri ALL, shfaqen të gjitha rreshtat, duke përfshirë dublikatat. Në deklaratën UNION, parametri ALL ka të njëjtin kuptim si në SELECT, por me një ndryshim: ky është parazgjedhja për një SELECT, por duhet të specifikohet në mënyrë eksplicite për UNION.

Në formën e tij origjinale, SampleDb nuk është i përshtatshëm për të demonstruar përdorimin e operatorit UNION. Prandaj në këtë seksion krijohet një tabelë e re EmployeeEnh e cila është identike tabela ekzistuese Punonjës, por ka një kolonë shtesë të qytetit. Kjo kolonë tregon vendbanimin e punonjësve.

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 SELECT. Pastaj rreshtat e tabelës origjinale futen në tavoline 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 e burimit 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 duke përdorur mjedisin Studio Menaxhimi ose me kodin e mëposhtëm:

PËRDORIMI SampleDb; PËRDITËZIM EmployeeEnh SET City = "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 = "Shën Petersburg" WHERE Id = 18316; UPDATE EmployeeEnh SET City = "Krasnodar" WHERE Id = 25348; PËRDITËSIM EmployeeEnh SET Qyteti = "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 pyetjeje:

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 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ë përputhshme.)

Rezultati i lidhjes mund të porositet vetëm duke përdorur klauzolën ORDER BY në udhëzimi i fundit SELECT siç tregohet në shembullin e mëposhtëm. GROUP ofron BY dhe HAVING mund të përdoren me udhëzime të veçanta SELECT, por jo në vetë bashkimin.

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

Operatori UNION mbështet opsionin ALL. Ky opsion nuk heq dublikatat nga grupi i rezultateve. Një operator OR mund të përdoret në vend të operatorit 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.

Operatorët INTERSECT dhe EXCEPT

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, ka një grup rreshtash që u përkasin të dy tabelave. Dhe ndryshimi midis 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 operatorit INTERSECT:

Transact-SQL nuk e mbështet përdorimin e parametrit ALL as me operatorët INTERSECT ose EXCEPT. Përdorimi i operatorit EXCEPT tregohet në shembullin e mëposhtëm:

Duhet mbajtur 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 PËRVEÇ deklaratës dhe operatori UNION ka precedencën më të ulët. Dështimi për t'i kushtuar vëmendje përparësisë së ekzekutimit kur përdorni disa operatorë të ndryshëm grupesh mund të çojë në rezultate të papritura.

Shprehjet RAST

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 sipas klasës së tyre shoqërore, duke përdorur vlerat 1, 2 dhe 3, që tregojnë përkatësisht burra, gra dhe fëmijë. Kjo teknikë programimi mund të zvogëlojë kohën e nevojshme për zbatimin e programit. Shprehje RASTE Transact-SQL ju lejon të zbatoni me lehtësi këtë lloj kodimi.

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 Transact-SQL lejon përdorimin e shprehjeve. Shprehja CASE ka dy forma:

    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ë si më poshtë:

V në këtë rast kërkohet kushti i parë i përputhjes dhe më pas ekzekutohet klauzola e përputhjes THEN. Nëse asnjë nga kushtet nuk i plotëson 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 pyetjeje:

Ky shembull peshon buxhetet e të gjitha projekteve dhe shfaq peshat e llogaritura së bashku me emrat 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 KUR p1.Buxheti (SELECT AVG (p2.Budget) FROM Project p2) PAS "mbi mesataren" FUND "Kategoria e buxhetit" FROM 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 në një grup rreshtash dhe kthejnë një vlerë të vetme. Argumentet e funksioneve agregate mund të jenë si kolonat e tabelës 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_funksionit ([TË GJITHA | TË DISTINCT] shprehje)

ku DISTINCT tregon se funksioni duhet të merret parasysh vetëm kuptime të ndryshme argumenti, dhe ALL përfshin 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, dhe nëse fjala kyçe ALL është e pranishme, 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 për të gjitha rreshtat në tabelën hyrëse të klauzolës SELECT. Për më tepër, në klauzolën SELECT, nuk mund të përdorni të dy funksionet agregate dhe kolonat e tabelës (ose shprehjet me to) në mungesë të klauzolës GROUP BY, të cilën do ta shqyrtojmë në seksioni tjetër.

Funksioni COUNT ka dy formate. Në rastin e parë, numri i rreshtave në tabelën hyrëse kthehet, në rastin e dytë, numri i vlerave të argumenteve 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ë (të gjitha ose duke përmbushur një kusht të caktuar). Për këtë përdoret sintaksa e parë.

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 llojeve të produkteve"

NGA Produkti

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

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

ZGJIDH NUMRIN (EMRI I NDRYSHËM)

NGA Klienti

Përdorimi i pjesës tjetër të funksioneve agregate unare është i njëjtë si për COUNT, përveç se për funksionet MIN dhe MAX, përdorimi i fjalëve kyçe DISTINCT dhe ALL është i pakuptimtë. Përveç fushave numerike, fushat e karaktereve mund të përdoren me funksionet COUNT, MAX dhe MIN. 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 porosisë)

NGA

KU Urdhri Data "1.09.2010"

Detyrë për punë e pavarur: Gjendje në gjuhë Pyetjet SQL për të mostruar të dhënat e mëposhtme:

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

Artikujt kryesorë të lidhur