Sql suma su sąlyga. Skaičiavimai sql

Šioje pamokoje sužinosite, kaip naudotis SUM funkcija SQL serveryje (Transact-SQL) su sintaksė ir pavyzdžiais.

apibūdinimas

SQL serveryje (Transact-SQL) SUM funkcija grąžina bendrą išraiškos reikšmę.

Sintaksė

SQL serverio (Transact-SQL) funkcijos SUM sintaksė yra tokia:

ARBA funkcijos SUM sintaksė grupuojant rezultatus pagal vieną ar daugiau stulpelių yra:

Parametrai arba argumentai

išraiška1 , išraiška2 , ... išraiška_n yra išraiškos, kurios nėra įtrauktos į funkciją SUM ir turi būti įtrauktos į GROUP BY sąlygą SQL sakinio pabaigoje.
aggregate_expression yra stulpelis arba išraiška, kuri bus apibendrinta.
lentelės – lentelės, iš kurių norima gauti įrašus. Turi būti bent viena lentelė iš FROM.
KUR sąlygos – neprivaloma. Tai yra sąlygos, kurias turi atitikti pasirinkti įrašai.

Taikymas

Funkciją SUM galima naudoti šiose SQL Server (Transact-SQL) versijose:
„SQL Server vNext“, „SQL Server 2016“, „SQL Server 2015“, „SQL Server 2014“, „SQL Server 2012“, „SQL Server 2008 R2“, „SQL Server 2008“, „SQL Server 2005“

Pavyzdys su vienu lauku

Pažvelkime į kai kuriuos SQL Server SUM funkcijos pavyzdžius, kad suprastume, kaip naudoti SUM funkciją SQL serveryje (Transact-SQL).

Pavyzdžiui, galite sužinoti bendrą visų produktų, kurių kiekis yra didesnis nei 10, kiekį.

Šiame funkcijos SUM pavyzdyje išraišką SUM(kiekis) pavadinome „Bendras kiekis“. Grąžinant rezultatų rinkinį – kaip lauko pavadinimas bus rodomas „Bendras kiekis“.

DISTINCT naudojimo pavyzdys

Funkcijoje SUM galite naudoti operatorių DISTINCT. Pavyzdžiui, toliau pateiktame SQL sakinyje pateikiamas bendras atlyginimas su unikaliomis atlyginimų reikšmėmis, kai atlyginimas yra mažesnis nei 29 000 USD per metus.

Jei du atlyginimai būtų 24 000 USD per metus, tik viena iš šių verčių būtų naudojama SUM funkcijoje.

Formulės naudojimo pavyzdys

Funkcijoje SUM esanti išraiška nebūtinai turi būti vienas laukas. Taip pat galite naudoti formulę. Pavyzdžiui, galite apskaičiuoti visą komisinį mokestį.

Transact-SQL

PASIRINKITE SUMĄ(pardavimai * 0.03) AS "Visas komisinis" IŠ užsakymų;

PASIRINKITE SUMĄ (pardavimas * 0,03 ) AS "Visas komisinis mokestis"

IŠ užsakymų;

GROUP BY naudojimo pavyzdys

Kai kuriais atvejais turėsite naudoti operatorių GROUP BY su funkcija SUM.

Kaip sužinoti konkretaus tiekėjo pagamintų kompiuterių modelių skaičių? Kaip nustatyti vidutinę vienodų techninių charakteristikų kompiuterių kainą? Į šiuos ir daugelį kitų klausimų, susijusių su tam tikra statistine informacija, galima atsakyti naudojant galutinės (suvestinės) funkcijos. Standarte pateikiamos šios suvestinės funkcijos:

Visos šios funkcijos grąžina vieną reikšmę. Tuo pačiu ir funkcijos COUNT, MIN Ir MAX taikoma bet kokiam duomenų tipui SUMA Ir AVG naudojami tik skaitiniams laukams. Skirtumas tarp funkcijų SKAIČIUS (*) Ir COUNT(<имя поля>) yra tai, kad antrasis skaičiuodamas neatsižvelgia į NULL reikšmes.

Pavyzdys. Raskite minimalią ir maksimalią asmeninių kompiuterių kainą:

Pavyzdys. Raskite galimą A gamintojo pagamintų kompiuterių skaičių:

Pavyzdys. Jeigu mus domina A gamintojo gaminamų skirtingų modelių skaičius, tai užklausą galima suformuluoti taip (naudojant tai, kad lentelėje Prekė kiekvienas modelis įrašomas vieną kartą):

Pavyzdys. Raskite galimų skirtingų modelių, kuriuos gamina gamintojas A, skaičių. Užklausa panaši į ankstesnę, kurioje reikėjo nustatyti bendrą gamintojo A pagamintų modelių skaičių. Čia taip pat reikia rasti skirtingų modelių skaičių kompiuterio stalą (t. y. tuos, kuriuos galima parduoti).

Siekiant užtikrinti, kad gaudami statistinius rodiklius būtų naudojamos tik unikalios reikšmės, kai suvestinių funkcijų argumentas Gali būti naudojamas DISTINCT parametras. Kitas parametras ALL yra numatytoji ir daroma prielaida, kad visos grąžintos reikšmės stulpelyje yra skaičiuojamos. Operatorius,

Jei mums reikia gauti pagamintų kompiuterių modelių skaičių Visi gamintojas, turėsite naudoti GROUP BY sąlyga, sintaksiškai seka KUR punktai.

GROUP BY sąlyga

GROUP BY sąlyga naudojamas apibrėžti išvesties linijų grupes, kurioms galima taikyti apibendrintos funkcijos (COUNT, MIN, MAX, AVG ir SUM). Jei šios sąlygos nėra ir naudojamos suvestinės funkcijos, tada visi stulpeliai, kurių pavadinimai paminėti PASIRINKTI, turėtų būti įtraukta agregatinės funkcijos, ir šios funkcijos bus taikomos visam eilučių rinkiniui, atitinkančiam užklausos predikatą. Kitu atveju visi SELECT sąrašo stulpeliai neįtrauktos turi būti nurodytos suvestinėse funkcijose punkte GROUP BY. Dėl to visos išvesties užklausos eilutės yra suskirstytos į grupes, kurioms būdingi tie patys reikšmių deriniai šiuose stulpeliuose. Po to kiekvienai grupei bus taikomos suvestinės funkcijos. Atkreipkite dėmesį, kad GROUP BY visos NULL reikšmės laikomos lygiomis, t.y. grupuojant pagal lauką, kuriame yra NULL reikšmės, visos tokios eilutės pateks į vieną grupę.
Jeigu jei yra sąlyga GROUP BY, SELECT sąlygoje jokių agreguotų funkcijų, tada užklausa tiesiog pateiks vieną eilutę iš kiekvienos grupės. Ši funkcija kartu su raktiniu žodžiu DISTINCT gali būti naudojama siekiant pašalinti pasikartojančias eilutes rezultatų rinkinyje.
Pažvelkime į paprastą pavyzdį:
PASIRINKTI modelį, COUNT(modelis) AS Kiekis_modelis, AVG(kaina) AS vid._kaina
IŠ PC
GROUP BY modelį;

Šioje užklausoje kiekvienam kompiuterio modeliui nustatomas jų skaičius ir vidutinė kaina. Visos eilutės su ta pačia modelio verte sudaro grupę, o SELECT išvestis apskaičiuoja kiekvienos grupės verčių skaičių ir vidutines kainos vertes. Užklausos rezultatas bus tokia lentelė:
modelis Kiekis_modelis Vid._kaina
1121 3 850.0
1232 4 425.0
1233 3 843.33333333333337
1260 1 350.0

Jei SELECT turėtų datos stulpelį, tuomet būtų galima skaičiuoti šiuos rodiklius kiekvienai konkrečiai datai. Norėdami tai padaryti, turite pridėti datą kaip grupavimo stulpelį, o tada apibendrintos funkcijos bus apskaičiuojamos kiekvienam verčių deriniui (modelio data).

Yra keletas specifinių suvestinių funkcijų vykdymo taisyklės:

  • Jeigu dėl prašymo negauta jokių eilučių(arba daugiau nei vieną eilutę tam tikrai grupei), tada nėra jokių pirminių duomenų, skirtų apskaičiuojant bet kurią suminę funkciją. Šiuo atveju funkcijų COUNT rezultatas bus lygus nuliui, o visų kitų funkcijų rezultatas bus NULIS.
  • Argumentas agregatinė funkcija pati negali turėti agreguotų funkcijų(funkcija iš funkcijos). Tie. vienoje užklausoje neįmanoma, tarkime, gauti maksimalių vidutinių reikšmių.
  • Funkcijos COUNT vykdymo rezultatas yra sveikasis skaičius(SVEIKI SKAIČIUS). Kitos agregacinės funkcijos paveldi jų apdorojamų verčių duomenų tipus.
  • Jei funkcija SUM duoda rezultatą, didesnį už didžiausią naudojamo duomenų tipo reikšmę, klaida.

Taigi, jei prašyme nėra GROUP BY sąlygos, Tai agregatinės funkcijosįtrauktas į SELECT sąlyga, vykdomi visose gautose užklausos eilutėse. Jei prašyme yra GROUP BY sąlyga, kiekvienas eilučių rinkinys, turintis tokias pačias stulpelio ar stulpelių grupės, nurodytos stulpelyje, reikšmes GROUP BY sąlyga, sudaro grupę ir agregatinės funkcijos atliekami kiekvienai grupei atskirai.

TURIMAS pasiūlymą

Jeigu WERE sąlyga apibrėžia predikatą eilučių filtravimui, tada TURIMAS pasiūlymą taikoma po grupavimo apibrėžti panašų predikatą, kuris filtruoja grupes pagal reikšmes agregatinės funkcijos. Ši sąlyga reikalinga norint patvirtinti reikšmes, gautas naudojant agregatinė funkcija ne iš atskirų įrašo šaltinio eilučių, apibrėžtų FROM sąlyga, ir iš tokių linijų grupės. Todėl toks čekis negali būti įtrauktas į WERE sąlyga.

Funkcija SUM SQL kalba, nepaisant jos paprastumo, gana dažnai naudojama dirbant su duomenų baze. Su jo pagalba patogu gauti kai kuriuos tarpinius ar galutinius rezultatus nesinaudojant pagalbiniais DBVS įrankiais.

Funkcijos sintaksė

Daugumoje SQL kalbų sumos sintaksė yra ta pati – kaip argumentas naudojamas tik lauko pavadinimas arba tam tikra aritmetinė kelių iš jų operacija, virš kurios reikalaujama suma.

Išimtiniais atvejais galima perduoti konkrečią reikšmę kaip skaičių ar kintamąjį, tačiau tokios „schemos“ praktiškai nenaudojamos, nes neturi didelės reikšmės. Žemiau yra funkcijos sintaksė SQL:

suma(a) – čia kaip parametras a naudojama kokia nors skaitinė reikšmė arba išraiška

Verta paminėti, kad prieš parametrą galite nustatyti raktinius žodžius, pavyzdžiui, DISTINCT arba ALL, kurie atitinkamai paims tik unikalias arba visas reikšmes.

SUM naudojimo SQL pavyzdys

Norint visiškai suprasti, kaip veikia funkcija, verta apsvarstyti keletą pavyzdžių. SQL sistemoje SUM galima naudoti ir kaip grįžtamąjį rezultatą, ir kaip tarpinę reikšmę, pavyzdžiui, norint patikrinti sąlygą.

Pirmuoju atveju apsvarstykite galimybę, kai reikia grąžinti kiekvieno produkto pardavimo sumą, atsižvelgiant į tai, kad pirkimų skaičius gali būti daugiskaita. Norint gauti rezultatą, pakaks paleisti šią užklausą:

PASIRINKITE produktą, suma(Pirkimo suma) IŠ Pardavimų GrupėsPagal produktą;

Atsakymas į šią komandą bus unikalus produktų sąrašas su bendra kiekvieno iš jų pirkimo suma.

Antram pavyzdžiui reikia gauti sąrašą produktų, kurių pardavimų suma viršijo tam tikrą vertę, pavyzdžiui, 100. Šios užduoties rezultatą galite gauti keliais būdais, iš kurių optimaliausias – vykdyti vieną užklausą:

SELECT Product FROM (SELECT Product, sum (Pirkimo suma) kaip suma IŠ pardavimo) WHERE Sum > 100.

SQL – 11 pamoka. Sumos funkcijos, skaičiuojami stulpeliai ir rodiniai

Suminės funkcijos taip pat vadinamos statistinėmis, agregacinėmis arba sumos funkcijomis. Šios funkcijos apdoroja eilučių rinkinį, kad suskaičiuotų ir grąžintų vieną reikšmę. Yra tik penkios tokios funkcijos:
  • Funkcija AVG() grąžina vidutinę stulpelio reikšmę.

  • Funkcija COUNT() grąžina eilučių skaičių stulpelyje.

  • Funkcija MAX() grąžina didžiausią reikšmę stulpelyje.

  • Funkcija MIN() grąžina mažiausią reikšmę stulpelyje.

  • SUM() Funkcija grąžina stulpelio reikšmių sumą.

Su vienu iš jų – COUNT() – jau susipažinome 8 pamokoje. Dabar susipažinkime su kitais. Tarkime, norėjome sužinoti minimalią, maksimalią ir vidutinę knygų kainą mūsų parduotuvėje. Tada iš kainų lentelės turite paimti minimalias, maksimalias ir vidutines kainų stulpelio vertes. Prašymas paprastas:

PASIRINKITE MIN(kaina), MAX(kaina), AVG(kaina) IŠ kainų;

Dabar norime išsiaiškinti, kiek prekių mums atvežė tiekėjas „House of Printing“ (id=2). Tokį prašymą pateikti nėra taip paprasta. Pagalvokime, kaip jį sudaryti:

1. Pirmiausia iš lentelės Prekės (gaunamos) pasirinkite identifikatorius (id_incoming) tų pristatymų, kuriuos atliko tiekėjas „Spaustuvė“ (id=2):

2. Dabar iš Tiekimo žurnalo lentelės (žurnalas_gaunamas) reikia pasirinkti prekes (id_prekė) ir jų kiekius (kiekis), kurios buvo vykdomos 1 punkte rastuose pristatymuose. Tai yra, užklausa iš 1 taško tampa įdėta:

3. Dabar į gautą lentelę turime įtraukti rastų produktų kainas, kurios yra saugomos Kainų lentelėje. Tai reiškia, kad turėsime prisijungti prie Supply Magazine (magazine_incoming) ir kainų lentelių naudodami stulpelį id_product:

4. Gautoje lentelėje aiškiai trūksta stulpelio Suma, tai yra skaičiuojamas stulpelis. Galimybė kurti tokius stulpelius suteikiama MySQL. Norėdami tai padaryti, užklausoje tereikia nurodyti apskaičiuoto stulpelio pavadinimą ir ką jis turėtų skaičiuoti. Mūsų pavyzdyje toks stulpelis vadinsis summa ir jis apskaičiuos kiekio ir kainos stulpelių sandaugą. Naujo stulpelio pavadinimas atskiriamas žodžiu AS:

PASIRINKITE žurnalo_gaunamas.id_produktas, žurnalo_gaunamas.kiekis, kainos.kaina, žurnalo_gaunamasis.kiekis*kainos.kaina AS suma FROM žurnalas_gaunamas, kainos WHERE žurnalas_gaunamas.id_produktas= kainos.id_produktas IR id_gaunamasis= (SELECT id_incoming FROM įeinantis arba WHERE2);

5. Puiku, belieka sumuoti sumos stulpelį ir pagaliau sužinoti, už kiek tiekėjas „House of Printing“ mums atvežė prekių. Funkcijos SUM() naudojimo sintaksė yra tokia:

SELECT SUM(stulpelio_pavadinimas) FROM lentelės_pavadinimas;

Mes žinome stulpelio pavadinimą - summa, bet mes neturime lentelės pavadinimo, nes tai yra užklausos rezultatas. Ką daryti? Tokiais atvejais MySQL turi rodinius. Rodinys yra pasirinkimo užklausa, kuriai suteikiamas unikalus pavadinimas ir kuri gali būti saugoma duomenų bazėje vėlesniam naudojimui.

Rodinio kūrimo sintaksė yra tokia:

CREATE VIEW view_name AS užklausa;

Išsaugokime savo užklausą kaip rodinį, pavadintą report_vendor:

KURTI PERŽIŪRĄ report_vendor AS PASIRINKTI žurnalo_gaunamas.id_produktas, žurnalo_gaunamas.kiekis, kainos.kaina, žurnalo_gaunamasis.kiekis*kainos.kaina AS suma IŠ žurnalo_gaunamas, kainos KUR žurnalas_gaunamas.id_produktas= kainos.id_produktas IR id_gaunamas produktas= (SELECT2 id_incomingdoringH );

6. Dabar galite naudoti paskutinę funkciją SUM():

SELECT SUM(suma) IŠ ataskaitos_tiekėjo;

Taigi mes pasiekėme rezultatą, nors tam turėjome naudoti įdėtas užklausas, sujungimus, apskaičiuotus stulpelius ir rodinius. Taip, kartais reikia galvoti, kad gautum rezultatą, be to niekur nepasieksi. Bet palietėme dvi labai svarbias temas – apskaičiuotas stulpelius ir peržiūras. Pakalbėkime apie juos išsamiau.

Apskaičiuoti laukai (stulpeliai)

Naudodamiesi pavyzdžiu, šiandien pažvelgėme į matematinį skaičiuojamąjį lauką. Čia noriu pridurti, kad galite naudoti ne tik daugybos operaciją (*), bet ir atimtį (-), sudėjimą (+), dalybą (/). Sintaksė yra tokia:

SELECT stulpelio_pavadinimas 1, stulpelio_pavadinimas 2, stulpelio_pavadinimas 1 * stulpelio_pavadinimas 2 AS apskaičiuotas_stulpelio_pavadinimas IŠ lentelės_pavadinimas;

Antras niuansas yra AS raktinis žodis, jį panaudojome nustatydami skaičiuojamo stulpelio pavadinimą. Tiesą sakant, šis raktinis žodis naudojamas bet kokių stulpelių slapyvardžiams nustatyti. Kodėl tai būtina? Dėl kodo mažinimo ir skaitymo. Pavyzdžiui, mūsų vaizdas gali atrodyti taip:

KURTI PERŽIŪRĄ report_vendor AS SELECT A.id_product, A.quantity, B.price, A.quantity*B.price AS summa FROM žurnalas_gaunamas AS A, kainos AS B WHERE A.id_product= B.id_product AND id_incoming= (PASIRINKITE id_gaunamą IŠ gaunamų WHERE id_vendor=2);

Sutikite, kad tai daug trumpesnė ir aiškesnė.

Atstovavimas

Jau peržiūrėjome rodinių kūrimo sintaksę. Sukūrus rodinius, juos galima naudoti taip pat, kaip ir lenteles. Tai yra, vykdykite jų užklausas, filtruokite ir rūšiuokite duomenis ir derinkite kai kuriuos rodinius su kitais. Viena vertus, tai labai patogus būdas saugoti dažnai naudojamas sudėtingas užklausas (kaip mūsų pavyzdyje).

Tačiau atminkite, kad rodiniai nėra lentelės, tai yra, jie nesaugo duomenų, o tik nuskaito juos iš kitų lentelių. Taigi, pirma, pasikeitus duomenims lentelėse, pasikeis ir pateikimo rezultatai. Ir antra, kai pateikiama užklausa rodiniui, ieškoma reikiamų duomenų, tai yra, sumažėja DBVS našumas. Todėl neturėtumėte jais piktnaudžiauti.

Išmokime apibendrinti. Ne, tai ne SQL tyrimo rezultatai, o duomenų bazės lentelių stulpelių reikšmių rezultatai. SQL agregacinės funkcijos veikia pagal stulpelio reikšmes, kad sukurtų vieną gautą reikšmę. Dažniausiai naudojamos SQL agregavimo funkcijos yra SUM, MIN, MAX, AVG ir COUNT. Būtina atskirti du suvestinių funkcijų naudojimo atvejus. Pirma, suvestinės funkcijos naudojamos pačios ir pateikia vieną gautą reikšmę. Antra, suvestinės funkcijos naudojamos su sąlyga SQL GROUP BY, tai yra, grupavimas pagal laukus (stulpelius), kad gautų kiekvienos grupės vertes. Pirmiausia panagrinėkime suvestinių funkcijų naudojimo be grupavimo atvejus.

SQL SUM funkcija

Funkcija SQL SUM grąžina duomenų bazės lentelės stulpelio reikšmių sumą. Jis gali būti taikomas tik stulpeliams, kurių reikšmės yra skaičiai. SQL užklausos, norint gauti gautą sumą, prasideda taip:

PASIRINKTI SUMĄ (COLUMN_NAME)...

Po šios išraiškos yra FROM (TABLE_NAME), tada sąlyga gali būti nurodyta naudojant WHERE sąlygą. Be to, prieš stulpelio pavadinimą gali būti įrašytas DISTINCT, o tai reiškia, kad bus skaičiuojamos tik unikalios reikšmės. Pagal numatytuosius nustatymus atsižvelgiama į visas reikšmes (tam galite konkrečiai nurodyti ne DISTINCT, o ALL, bet žodžio ALL nereikia).

Jei norite paleisti duomenų bazės užklausas iš šios pamokos MS SQL Server, bet ši DBVS nėra įdiegta jūsų kompiuteryje, galite ją įdiegti naudodami instrukcijas šioje nuorodoje .

Pirmiausia dirbsime su įmonės duomenų baze – Įmonė1. Šios duomenų bazės kūrimo, jos lentelių ir lentelių užpildymo duomenimis scenarijus yra šioje nuorodoje esančiame faile .

1 pavyzdys. Yra įmonės duomenų bazė su duomenimis apie jos padalinius ir darbuotojus. Lentelėje Personalas taip pat yra stulpelis su duomenimis apie darbuotojų atlyginimus. Pasirinkimas iš lentelės atrodo taip (norėdami padidinti paveikslėlį, spustelėkite jį kairiuoju pelės klavišu):

Norėdami gauti visų atlyginimų sumą, naudojame šią užklausą (MS SQL Server - su ankstesne konstrukcija USE company1;):

PASIRINKITE SUMĄ (Atlyginimą) IŠ personalo

Ši užklausa pateiks reikšmę 287664.63.

Ir dabar . Pratybose jau pradedame komplikuoti užduotis, priartinti jas prie tų, su kuriomis susiduriama praktiškai.

SQL MIN funkcija

Funkcija SQL MIN taip pat veikia stulpeliuose, kurių reikšmės yra skaičiai, ir grąžina visų stulpelio reikšmių minimumą. Šios funkcijos sintaksė panaši į funkcijos SUM sintaksę.

3 pavyzdys. Duomenų bazė ir lentelė yra tokie patys kaip 1 pavyzdyje.

Turime išsiaiškinti 42 skyriaus darbuotojų minimalų atlyginimą. Norėdami tai padaryti, parašykite šią užklausą (MS SQL Server - su priešdėliu USE company1;):

Užklausa pateiks vertę 10505.90.

Ir vėl savarankiško sprendimo pratimai. Šiame ir kai kuriuose kituose pratimuose jums reikės ne tik Personalo lentelės, bet ir Org lentelės, kurioje yra duomenys apie įmonės padalinius:


4 pavyzdys. Lentelė Org pridedama prie lentelės Personalas, kurioje yra duomenys apie įmonės padalinius. Atspausdinkite minimalų vieno darbuotojo išdirbtų metų skaičių departamente, esančiame Bostone.

SQL MAX funkcija

Funkcija SQL MAX veikia panašiai ir turi panašią sintaksę, kuri naudojama, kai reikia nustatyti didžiausią reikšmę tarp visų stulpelio reikšmių.

5 pavyzdys.

Turime sužinoti maksimalų 42 skyriaus darbuotojų atlyginimą. Norėdami tai padaryti, parašykite šią užklausą (MS SQL Server - su priešdėliu USE company1;):

Užklausa pateiks vertę 18352.80

Jau laikas savarankiško sprendimo pratimai.

6 pavyzdys. Vėl dirbame su dviem stalais – Staff ir Org. Rodyti skyriaus pavadinimą ir didžiausią vieno darbuotojo gauto komisinio atlyginimo dydį skyriuje, priklausančiame padalinių grupei (skyriui) Rytų. Naudokite PRISIJUNGTI (lentelių sujungimas) .

SQL AVG funkcija

Tai, kas nurodyta dėl ankstesnių aprašytų funkcijų sintaksės, galioja ir SQL AVG funkcijai. Ši funkcija grąžina visų stulpelio reikšmių vidurkį.

7 pavyzdys. Duomenų bazė ir lentelė yra tokios pačios kaip ir ankstesniuose pavyzdžiuose.

Tarkime, kad norite sužinoti vidutinį 42 skyriaus darbuotojų darbo stažą. Norėdami tai padaryti, parašykite šią užklausą (MS SQL Server - su ankstesne konstrukcija USE įmonė1;):

Rezultatas bus 6,33

8 pavyzdys. Dirbame su vienu stalu – Personalas. Rodyti vidutinį atlyginimą darbuotojams, turintiems 4–6 metų patirtį.

SQL COUNT funkcija

Funkcija SQL COUNT grąžina duomenų bazės lentelės įrašų skaičių. Jei užklausoje nurodysite SELECT COUNT(COLUMN_NAME) ..., rezultatas bus įrašų skaičius, neatsižvelgiant į tuos įrašus, kuriuose stulpelio reikšmė yra NULL (neapibrėžta). Jei kaip argumentą naudosite žvaigždutę ir pradėsite SELECT COUNT(*) ... užklausą, rezultatas bus visų lentelės įrašų (eilučių) skaičius.

9 pavyzdys. Duomenų bazė ir lentelė yra tokios pačios kaip ir ankstesniuose pavyzdžiuose.

Norite sužinoti visų darbuotojų, kurie gauna komisinius, skaičių. Darbuotojų, kurių Comm stulpelių reikšmės nėra NULL, skaičius bus grąžintas pagal šią užklausą (MS SQL Server - su priešdėliu USE company1;):

PASIRINKTI SKAIČIUS (Comm) IŠ personalo

Rezultatas bus 11.

10 pavyzdys. Duomenų bazė ir lentelė yra tokios pačios kaip ir ankstesniuose pavyzdžiuose.

Jei norite sužinoti bendrą lentelės įrašų skaičių, naudokite užklausą su žvaigždute kaip funkcijos COUNT argumentą (MS SQL Server - su ankstesne konstrukcija USE company1;):

PASIRINKTI SKAIČIUS (*) IŠ personalo

Rezultatas bus 17.

Kitame savarankiško sprendimo pratimas turėsite naudoti antrinę užklausą.

11 pavyzdys. Dirbame su vienu stalu – Personalas. Rodyti darbuotojų skaičių planavimo skyriuje (Plains).

Sujungti funkcijas su SQL GROUP BY

Dabar pažiūrėkime, kaip naudoti agregatines funkcijas kartu su SQL GROUP BY sakiniu. Teiginys SQL GROUP BY naudojamas sugrupuoti rezultatų reikšmes pagal stulpelius duomenų bazės lentelėje. Svetainėje yra atskirai šiam operatoriui skirta pamoka .

Dirbsime su „Skelbimų portalo 1“ duomenų baze. Šios duomenų bazės kūrimo, jos lentelės ir duomenų lentelės užpildymo scenarijus yra šioje nuorodoje esančiame faile .

12 pavyzdys. Taigi, yra skelbimų portalo duomenų bazė. Jame yra skelbimų lentelė, kurioje pateikiami duomenys apie savaitę pateiktus skelbimus. Stulpelyje Kategorija pateikiami duomenys apie dideles skelbimų kategorijas (pvz., Nekilnojamas turtas), o stulpelyje Dalys pateikiami duomenys apie mažesnes dalis, įtrauktas į kategorijas (pavyzdžiui, Butų ir vasarnamių dalys yra Nekilnojamojo turto kategorijos dalys). Stulpelyje Vienetai pateikiami duomenys apie pateiktų skelbimų skaičių, o stulpelyje Pinigai – apie gautą pinigų sumą už skelbimų pateikimą.

KategorijadalisVienetaiPinigai
TransportasAutomobiliai110 17600
Nekilnojamasis turtasButai89 18690
Nekilnojamasis turtasDachas57 11970
TransportasMotociklai131 20960
Statybinės medžiagosLentos68 7140
Elektros inžinerijatelevizoriai127 8255
Elektros inžinerijaŠaldytuvai137 8905
Statybinės medžiagosRegips112 11760
LaisvalaikisKnygos96 6240
Nekilnojamasis turtasNamie47 9870
LaisvalaikisMuzika117 7605
LaisvalaikisŽaidimai41 2665

Naudodami teiginį SQL GROUP BY suraskite pinigų sumą, uždirbtą skelbdami skelbimus kiekvienoje kategorijoje. Rašome šią užklausą (MS SQL Server - su ankstesne konstrukcija USE adportal1;):

PASIRINKITE kategoriją, SUMMA (Pinigai) KAIP Pinigai IŠ SKELBIMŲ GRUPĖS PAGAL kategoriją

13 pavyzdys. Duomenų bazė ir lentelė yra tokios pačios kaip ir ankstesniame pavyzdyje.

Naudodami teiginį SQL GROUP BY sužinokite, kurioje kiekvienos kategorijos dalyje buvo daugiausia įrašų. Rašome šią užklausą (MS SQL Server - su ankstesne konstrukcija USE adportal1;):

PASIRINKTI kategoriją, dalį, MAX (vnt.) AS maksimalus IŠ SKELBIMŲ GRUPĖS PAGAL kategoriją

Rezultatas bus tokia lentelė:

Bendras ir individualias vertes galima gauti vienoje lentelėje užklausos rezultatų derinimas naudojant UNION operatorių .

Reliacinės duomenų bazės ir SQL kalba