Sql summa ehdoineen. Summafunktio SQL:ssä: SUM. GROUP BY lauseke

Kuinka saan selville tietyn toimittajan valmistamien PC-mallien lukumäärän? Kuinka määrittää tietokoneiden, joilla on samat tekniset ominaisuudet, keskihinta? Näihin ja moniin muihin joihinkin tilastotietoihin liittyviin kysymyksiin voidaan vastata käyttämällä lopulliset (aggregaatti) toiminnot. Standardi tarjoaa seuraavat aggregaattifunktiot:

Kaikki nämä funktiot palauttavat yhden arvon. Samalla toiminnot COUNT, MIN Ja MAX soveltuu mihin tahansa tietotyyppiin, kun taas SUMMA Ja AVG käytetään vain numeerisissa kentissä. Ero toiminnon välillä KREIVI(*) Ja KREIVI(<имя поля>) on, että toinen ei ota huomioon NULL-arvoja laskettaessa.

Esimerkki. Etsi henkilökohtaisten tietokoneiden vähimmäis- ja enimmäishinta:

Esimerkki. Etsi valmistajan A valmistamien tietokoneiden käytettävissä oleva määrä:

Esimerkki. Jos olemme kiinnostuneita valmistajan A valmistamien eri mallien määrästä, kysely voidaan muotoilla seuraavasti (käyttämällä sitä tosiasiaa, että tuotetaulukkoon jokainen malli kirjataan kerran):

Esimerkki. Selvitä valmistajan A valmistamien eri mallien lukumäärä. Kysely on samanlainen kuin edellinen, jossa piti määrittää valmistajan A valmistamien mallien kokonaismäärä. Täältä tulee myös etsiä eri mallien lukumäärä PC-pöytä (eli ne, jotka ovat myynnissä).

Sen varmistamiseksi, että tilastollisia indikaattoreita hankittaessa käytetään vain yksilöllisiä arvoja, milloin aggregaattifunktioiden argumentti voidaan käyttää DISTINCT-parametri. Toinen parametri ALL on oletusarvo ja olettaa, että kaikki sarakkeen palautetut arvot lasketaan. Operaattori,

Jos meidän on saatava tuotettujen PC-mallien lukumäärä kaikille valmistajalta, sinun on käytettävä GROUP BY lauseke, seuraavat syntaktisesti WHERE-lausekkeet.

GROUP BY lauseke

GROUP BY lauseke käytetään määrittämään tulosjonoryhmiä, joihin voidaan soveltaa koontifunktiot (COUNT, MIN, MAX, AVG ja SUM). Jos tämä lauseke puuttuu ja käytetään koostefunktioita, kaikki sarakkeet, joiden nimet on mainittu VALITSE, pitäisi olla mukana aggregaattifunktiot, ja näitä toimintoja käytetään koko rivijoukolle, joka täyttää kyselypredikaatin. Muussa tapauksessa kaikki SELECT-luettelon sarakkeet ei sisälly aggregaattifunktioissa on määritettävä GROUP BY -lauseessa. Tämän seurauksena kaikki tuloskyselyrivit on jaettu ryhmiin, joille on ominaista samat arvoyhdistelmät näissä sarakkeissa. Tämän jälkeen kuhunkin ryhmään sovelletaan koostefunktioita. Huomaa, että GROUP BY:n kaikkia NULL-arvoja käsitellään samanarvoisina, ts. kun ryhmitellään kentällä, joka sisältää NULL-arvoja, kaikki tällaiset rivit kuuluvat yhteen ryhmään.
Jos jos on GROUP BY -lauseke, SELECT-lauseessa ei aggregaattitoimintoja, kysely palauttaa vain yhden rivin kustakin ryhmästä. Tätä ominaisuutta yhdessä DISTINCT-avainsanan kanssa voidaan käyttää poistamaan päällekkäiset rivit tulosjoukosta.
Katsotaanpa yksinkertaista esimerkkiä:
VALITSE malli, COUNT(malli) AS määrä_malli, AVG(hinta) AS keskihinta
PC:ltä
GROUP BY mallin mukaan;

Tässä pyynnössä jokaiselle PC-mallille määritetään niiden lukumäärä ja keskimääräinen hinta. Kaikki rivit, joilla on sama malliarvo, muodostavat ryhmän, ja SELECT-tulostus laskee kunkin ryhmän arvojen lukumäärän ja keskihinta-arvot. Kyselyn tulos on seuraava taulukko:
malli Määrä_malli Avg_price
1121 3 850.0
1232 4 425.0
1233 3 843.33333333333337
1260 1 350.0

Jos SELECT:ssä olisi päivämääräsarake, nämä indikaattorit olisi mahdollista laskea kullekin tietylle päivämäärälle. Tätä varten sinun on lisättävä päivämäärä ryhmittelysarakkeeksi, jonka jälkeen koontifunktiot lasketaan kullekin arvoyhdistelmälle (malli-päivämäärä).

On olemassa useita erityisiä aggregaattitoimintojen suorittamista koskevat säännöt:

  • Jos pyynnön seurauksena rivejä ei vastaanotettu(tai useamman kuin yhden rivin tietylle ryhmälle), silloin ei ole lähdetietoja minkään aggregaattifunktion laskemiseen. Tässä tapauksessa COUNT-funktioiden tulos on nolla ja kaikkien muiden funktioiden tulos on NULL.
  • Perustelu aggregaattitoiminto itse ei voi sisältää aggregaattifunktioita(funktio funktiosta). Nuo. yhdellä kyselyllä on mahdotonta saada esimerkiksi keskiarvojen maksimi.
  • COUNT-funktion suorittamisen tulos on kokonaisluku(KOKONAISLUKU). Muut koontifunktiot perivät käsittelemiensä arvojen tietotyypit.
  • Jos SUM-funktio tuottaa tuloksen, joka on suurempi kuin käytetyn tietotyypin maksimiarvo, virhe.

Joten jos pyyntö ei sisällä GROUP BY -lausekkeet, Tuo aggregaattifunktiot mukana SELECT-lauseke, suoritetaan kaikilla tuloksena olevilla kyselyriveillä. Jos pyyntö sisältää GROUP BY lauseke, jokainen rivijoukko, jolla on samat arvot sarakkeessa tai sarakeryhmässä määritellyllä sarakkeella GROUP BY lauseke, muodostaa ryhmän ja aggregaattifunktiot suoritetaan jokaiselle ryhmälle erikseen.

ON TARJOUS

Jos WHERE-lauseke määrittää sitten predikaatin rivien suodattamiseen ON TARJOUS pätee ryhmittelyn jälkeen määrittääksesi samanlaisen predikaatin, joka suodattaa ryhmät arvojen mukaan aggregaattifunktiot. Tätä lauseketta tarvitaan käyttämällä saatujen arvojen validointiin aggregaattitoiminto ei määritetyn tietuelähteen yksittäisiltä riveiltä FROM lausekkeesta, ja alkaen tällaisten linjojen ryhmiä. Siksi tällaista tarkistusta ei voida sisällyttää WHERE-lauseke.

Tässä opetusohjelmassa opit käyttämään SUMMA-toiminto SQL Serverissä (Transact-SQL) syntaksin ja esimerkkien kera.

Kuvaus

SQL Serverissä (Transact-SQL) SUMMA-toiminto palauttaa lausekkeen kokonaisarvon.

Syntaksi

SUM-funktion syntaksi SQL Serverissä (Transact-SQL) on:

TAI SUMMA-funktion syntaksi ryhmiteltäessä tuloksia yhden tai useamman sarakkeen mukaan on:

Parametrit tai argumentit

lauseke1 , lauseke2 , ... lauseke_n ovat lausekkeita, jotka eivät sisälly SUM-funktioon ja jotka on sisällytettävä GROUP BY -lauseeseen SQL-käskyn lopussa.
aggregate_expression on sarake tai lauseke, joka yhdistetään.
taulukot - taulukot, joista haluat saada tietueita. FROM-lauseessa on oltava vähintään yksi taulukko.
WHERE ehdot - valinnainen. Nämä ovat ehtoja, jotka on täytettävä valituille tietueille.

Sovellus

SUM-funktiota voidaan käyttää seuraavissa SQL Serverin (Transact-SQL) versioissa:
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

Esimerkki yhdellä kentällä

Katsotaanpa joitain SQL Server SUM -funktioesimerkkejä ymmärtääksemme, kuinka SUM-funktiota käytetään SQL Serverissä (Transact-SQL).

Voit esimerkiksi selvittää kaikkien sellaisten tuotteiden kokonaismäärän, joiden määrä on suurempi kuin 10.

Tässä SUM-funktion esimerkissä olemme aliasoineet lausekkeen SUM(määrä) "Kokonaismäärä". Kun palautat tulosjoukon - "Kokonaismäärä" näkyy kentän nimenä.

Esimerkki DISTINCT:n käytöstä

Voit käyttää DISTINCT-operaattoria SUMMA-toiminnossa. Esimerkiksi alla oleva SQL-lause palauttaa kokonaispalkan yksilöllisillä palkkaarvoilla, kun palkka on alle 29 000 dollaria vuodessa.

Jos molemmat palkat olisivat 24 000 dollaria vuodessa, vain toista näistä arvoista käytettäisiin SUMMA-funktiossa.

Esimerkki kaavan käytöstä

SUM-funktion sisältämän lausekkeen ei tarvitse olla yksittäinen kenttä. Voit myös käyttää kaavaa. Voit esimerkiksi laskea kokonaispalkkion.

Transact-SQL

SELECT SUM(myynti * 0,03) AS "Total Commission" tilauksista;

SELECT SUM (myynti * 0,03 ) AS "Total Commission"

FROM tilauksista ;

Esimerkki GROUP BY:n käytöstä

Joissakin tapauksissa sinun on käytettävä GROUP BY -operaattoria SUM-toiminnon kanssa.

TIETOKONE

Yhteenvetotoiminnot

SQL-kyselylausekkeet vaativat usein tietojen esikäsittelyä. Tätä tarkoitusta varten käytetään erityisiä funktioita ja lausekkeita.

Melko usein sinun on selvitettävä, kuinka monta tietuetta vastaa tiettyä kyselyä,mikä on tietyn numeerisen sarakkeen arvojen summa, sen maksimi-, minimi- ja keskiarvot. Tätä tarkoitusta varten käytetään ns. lopullisia (tilastollisia, aggregoituja) funktioita. Yhteenvetofunktiot käsittelevät tietuejoukkoja, jotka on määritetty esimerkiksi WHERE-lauseella. Jos sisällytät ne sarakeluetteloon SELECT-käskyn jälkeen, tuloksena oleva taulukko sisältää tietokantataulukon sarakkeiden lisäksi myös näiden funktioiden laskemat arvot. Seuraava onluettelo yhteenvetofunktioista.

  • COUNT (parametri ) palauttaa parametrissa määritetyn määrän tietueita. Jos haluat saada kaikkien tietueiden lukumäärän, sinun tulee määrittää parametriksi tähti (*). Jos määrität sarakkeen nimen parametriksi, funktio palauttaa niiden tietueiden määrän, joissa tässä sarakkeessa on muita arvoja kuin NULL. Saadaksesi selville, kuinka monta eri arvoa sarake sisältää, kirjoita sen nimen eteen DISTINCT-avainsana. Esimerkiksi:

SELECT COUNT(*) FROM Clients;

SELECT COUNT(Tilauksen_määrä) Asiakkailta;

SELECT COUNT(DISTINCT Order_Amount) FROM asiakkailta;

Seuraavan kyselyn suorittaminen johtaa virheilmoitukseen:

SELECT Alue , COUNT(*) FROM Clients ;

  • SUMMA (parametri ) palauttaa parametrissa määritetyn sarakkeen arvojen summan. Parametri voi olla myös lauseke, joka sisältää sarakkeen nimen. Esimerkiksi:

VALITSE SUMMA (Tilauksen_määrä) Asiakkailta;

Tämä SQL-käsky palauttaa yhden sarakkeen ja yhden tietueen taulukon, joka sisältää kaikkien Customers-taulukon Order_Amount-sarakkeen määritettyjen arvojen summan.

Oletetaan, että lähdetaulukossa Tilausmäärä-sarakkeen arvot ilmaistaan ​​ruplina, ja meidän on laskettava kokonaissumma dollareina. Jos nykyinen valuuttakurssi on esimerkiksi 27,8, voit saada vaaditun tuloksen lausekkeella:

VALITSE SUMMA (Tilauksen_määrä*27,8) Asiakkailta;

  • AVG (parametri ) palauttaa parametrissa määritetyn sarakkeen kaikkien arvojen aritmeettisen keskiarvon. Parametri voi olla lauseke, joka sisältää sarakkeen nimen. Esimerkiksi:

SELECT AVG (Tilauksen_määrä) Asiakkailta;

VALITSE AVG (Tilauksen_määrä*27,8) asiakkailta

MISSÄ alue<>"North_3west";

  • MAX (parametri ) palauttaa suurimman arvon parametrissa määritetyssä sarakkeessa. Parametri voi olla myös lauseke, joka sisältää sarakkeen nimen. Esimerkiksi:

VALITSE MAKSIMI(Tilauksen_määrä) Asiakkailta;

VALITSE MAKSIMI(Tilauksen_määrä*27,8) asiakkailta

MISSÄ Alue<>"North_3west";

  • MIN (parametri ) palauttaa parametrissa määritetyn sarakkeen vähimmäisarvon. Parametri voi olla lauseke, joka sisältää sarakkeen nimen. Esimerkiksi:

VALITSE MIN(Tilauksen_määrä) Asiakkailta;

VALITSE MIN (tilausmäärä*27 . 8) asiakkailta

MISSÄ Alue<>"North_3west";

Käytännössä on usein tarpeen saada lopullinen taulukko, joka sisältää numeeristen sarakkeiden kokonais-, keskiarvo-, maksimi- ja vähimmäisarvot. Tätä varten sinun tulee käyttää ryhmittely- (GROUP BY) ja yhteenvetotoimintoja.

VALITSE alue, SUM (Tilauksen_määrä) Asiakkailta

RYHMÄ alueittain;

Tämän kyselyn tulostaulukko sisältää alueiden nimet ja tilausten kokonaismäärät (kokonais) kaikilta asiakkailta vastaavilta alueilta (kuva 5).

Harkitse nyt pyyntöä saada kaikki yhteenvetotiedot alueittain:

SELECT Alue, SUM (Tilauksen_määrä), AVG (Tilauksen_määrä), MAX(Tilauksen_määrä), MIN (tilauksen_määrä)

Asiakkailta

RYHMÄ alueittain;

Alkuperäinen ja tulostaulukot näkyvät kuvassa. 8. Esimerkissä vain luoteisaluetta edustaa lähdetaulukossa useampi kuin yksi tietue. Siksi sen tulostaulukossa eri yhteenvetofunktiot antavat eri arvoja.

Riisi. 8. Lopullinen tilausmäärien taulukko alueittain

Kun käytät yhteenvetofunktioita sarakeluettelossa SELECT-käskyssä, niiden vastaavien sarakkeiden otsikot tulostaulukossa ovat Laus1001, Laus1002 ja niin edelleen. (tai jotain vastaavaa, riippuen SQL:n toteutuksesta). Voit kuitenkin asettaa otsikot yhteenvetofunktioiden ja muiden sarakkeiden arvoille oman harkintasi mukaan. Voit tehdä tämän määrittämällä heti SELECT-käskyn sarakkeen jälkeen lomakkeen lausekkeen:

AS sarakkeen_otsikko

Avainsana AS (as) tarkoittaa, että tulostaulukossa vastaavalla sarakkeella on oltava otsikko AS:n jälkeen. Määritettyä otsikkoa kutsutaan myös aliakseksi. Seuraava esimerkki (kuva 9) asettaa aliakset kaikille lasketuille sarakkeille:

VALITSE alue,

SUMMA (Tilauksen_summa) AS [Tilauksen kokonaissumma],

AVG (Order_Amount) AS [Keskimääräinen tilaussumma],

MAX(Tilauksen_määrä) AS Maksimi,

MIN (Order_amount) AS Minimi,

Asiakkailta

RYHMÄ alueittain;

Riisi. 9. Lopullinen tilausmäärien taulukko alueittain sarakealiaksilla

Lempinimet, jotka koostuvat useista sanoista, jotka on erotettu välilyönnillä, on suljettu hakasulkeisiin.

Yhteenvetofunktioita voidaan käyttää SELECT- ja HAVING-lauseissa, mutta niitä ei voi käyttää WHERE-lauseissa. HAVING-operaattori on samanlainen kuin WHERE-operaattori, mutta toisin kuin WHERE, se valitsee tietueet ryhmissä.

Oletetaan, että haluat määrittää, millä alueilla on useampi kuin yksi asiakas. Tätä tarkoitusta varten voit käyttää seuraavaa kyselyä:

VALITSE alue , Count(*)

Asiakkailta

RYHMÄ ALUEELLE, JOLLA ON LASKU(*) > 1;

Arvonkäsittelytoiminnot

Tietojen kanssa työskennellessä sitä joutuu usein käsittelemään (muuntamaan se haluttuun muotoon): valitse merkkijonosta osamerkkijono, poista alku- ja loppuvälit, pyöristä luku, laske neliöjuuri, määritä nykyinen aika jne. SQL siinä on seuraavat kolme toimintotyyppiä:

  • merkkijono toiminnot;
  • numeeriset toiminnot;
  • päivämäärä-aika toiminnot.

Merkkijonofunktiot

Merkkijonofunktiot ottavat merkkijonon parametriksi ja palauttavat sen käsittelyn jälkeen merkkijonon tai NULL:n.

  • SUBSTRING (rivi FROM alusta)palauttaa alimerkkijonon, joka on tuloksena parametriksi määritetystä merkkijonosta riviä. Alimerkkijono alkaa merkillä, jonka sarjanumero on määritetty aloitusparametrissa, ja sen pituus on määritetty pituusparametrissa. Rivin merkit numeroidaan vasemmalta oikealle alkaen 1:stä. Hakasulkeet tässä vain osoittavat, että niiden sisällä oleva lauseke on valinnainen. Jos ilmaisu pituudelle ei käytetä, sitten alimerkkijono alkaa ja alkuperäisen rivin loppuun asti. Parametrien arvot alku ja pituus on valittava niin, että haettu osamerkkijono on todella alkuperäisen merkkijonon sisällä. Muussa tapauksessa SUBSTRING-funktio palauttaa NULL-arvon.

Esimerkiksi:

SUBSTRING ("Dear Masha!" FROM 9 FOR 4) palauttaa "Masha";

SUBSTRING ("Rakas Masha!" FROM 9) palauttaa "Masha!";

SUBSTRING("Rakas Masha!" FROM 15) palauttaa NULL:n.

Voit käyttää tätä funktiota SQL-lausekkeessa esimerkiksi näin:

SELECT * FROM asiakkaista

WHERE SUBSTRING(Alue FROM 1 FOR 5) = "Pohjoinen";

  • UPPER(merkkijono ) muuntaa kaikki parametrissa määritetyn merkkijonon merkit isoiksi kirjaimiksi.
  • LOWER(merkkijono ) muuntaa kaikki parametrissa määritetyn merkkijonon merkit pieniksi kirjaimiksi.
  • TRIM (LEADING | TRAILING | BOTH ["merkki"] merkkijonosta ) poistaa merkkijonosta alku- (LEADING), loppu (TRAILING) tai molemmat (BOTH) merkit. Oletuksena poistettava merkki on välilyönti (" "), joten se voidaan jättää pois. Useimmiten tätä toimintoa käytetään välilyöntien poistamiseen.

Esimerkiksi:

TRIM (JOHTAA "" "Pietarin kaupungista") kiertää "Pietarin kaupunkia";

TRIM(TRALING " " FROM "Pietarin kaupunki") palauttaa "Pietarin kaupungin";

TRIM (molemmat " " FROM " city St. Petersburg ") palauttaa "city St. Petersburg";

TRIM (molemmat "Pietarin kaupunki") palauttaa "Pietarin kaupungin";

TRIM(molemmat "g" FROM "city of St. Petersburg") palauttaa "city of St. Petersburg".

Näistä funktioista yleisimmin käytetyt funktiot ovat SUBSTRING() JA TRIM().

Numeeriset funktiot

Numeeriset funktiot voivat hyväksyä parametreina paitsi numeerista tyyppiä olevaa dataa, vaan palauttavat aina numeron tai NULL-arvon (määrittämätön arvo).

  • SIJAINTI ( targetString IN merkkijono) etsii kohdemerkkijonon esiintymää määritetystä merkkijonosta. Jos haku onnistuu, palauttaa sen ensimmäisen merkin paikkanumeron, muuten 0. Jos kohdemerkkijonon pituus on nolla (esimerkiksi merkkijono " "), funktio palauttaa arvon 1. Jos ainakin yksi parametreista on NULL , sitten palautetaan NULL. Rivimerkit numeroidaan vasemmalta oikealle alkaen 1:stä.

Esimerkiksi:

POSITION("e" IN "Hei kaikille") palauttaa 5;

POSITION ("kaikki" IN "Hei kaikille") palauttaa 8;

POSITION(" " Hei kaikille") palauttaa 1;

POSITION("Hei!" IN "Hei kaikille") palauttaa 0.

Asiakastaulukossa (katso kuva 1) Osoite-sarake sisältää kaupungin nimen lisäksi postinumeron, kadun nimen ja muita tietoja. Sinun on ehkä valittava tietueita asiakkaille, jotka asuvat tietyssä kaupungissa. Joten jos haluat valita Pietarissa asuviin asiakkaisiin liittyviä tietueita, voit käyttää seuraavaa SQL-kyselylauseketta:

SELECT * FROM asiakkaista

WHERE POSITION (" Pietari " IN Osoite ) > 0;

Huomaa, että tämä yksinkertainen tiedonhakupyyntö voidaan muotoilla eri tavalla:

SELECT * FROM asiakkaista

WHERE Osoite LIKE "%Petersburg%";

  • EXTRACT (parametri ) hakee elementin päivämäärä-aika-arvosta tai väliltä. Esimerkiksi:

OTE (KUUKAUSI PÄIVÄMÄÄRÄ "2005-10-25") palauttaa 10.

  • CHARACTER_LENGTH(merkkijono ) palauttaa merkkijonon merkkien määrän.

Esimerkiksi:

CHARACTER_LENGTH("Hei kaikille") palauttaa 11.

  • OCTET_LENGTH(merkkijono ) palauttaa merkkijonon oktettien (tavujen) määrän. Jokaista latinalaista tai kyrillistä merkkiä edustaa yksi tavu ja kiinan aakkosten merkkiä kaksi tavua.
  • KARDINAALISUUS (parametri ) ottaa elementtijoukon parametriksi ja palauttaa kokoelman elementtien määrän (pääluku). Kokoelma voi olla esimerkiksi taulukko tai multiset, joka sisältää erityyppisiä elementtejä.
  • ABS (numero ) palauttaa luvun itseisarvon. Esimerkiksi:

ABS (-123) palauttaa 123;

ABS (2-5) palauttaa 3.

  • MO D (numero1, numero2 ) palauttaa ensimmäisen luvun kokonaisluvun jaon loppuosan toisella. Esimerkiksi:

MOD(5; h) palauttaa 2;

MOD(2; h) palauttaa arvon 0.

  • LN (numero ) palauttaa luvun luonnollisen logaritmin.
  • EXP (numero) palauttaa numeron (luonnollisen logaritmin kanta luvun potenssiin).
  • TEHO (numero1, numero2 ) palauttaa numero1 numero 2 (numero1 luvun2 potenssiin).
  • SQRT (numero ) palauttaa luvun neliöjuuren.
  • FLOOR (numero ) palauttaa suurimman kokonaisluvun, joka ei ylitä parametrin määrittämää (pyöristys alaspäin). Esimerkiksi:

FLOOR (5.123) palauttaa 5.0.

  • CEIL (numero) tai CEILING (numero ) palauttaa pienimmän kokonaisluvun, joka ei ole pienempi kuin pyöristysparametrilla määritetty arvo). Esimerkiksi:

CEIL(5.123) palauttaa 6.0.

  • WIDTH_BUCKET (luku1, numero2, numero3, numero4) palauttaa kokonaisluvun välillä 0 ja numero4 + 1. Numero2- ja numero3-parametrit määrittävät numeerisen välin, joka on jaettu yhtä suuriin väliin, joiden lukumäärän määrittää numero4-parametri sen välin numero, johon arvo osuu numero1. Jos numero1 on määritetyn alueen ulkopuolella, funktio palauttaa 0 tai luvun 4 + 1. Esimerkki:

WIDTH_BUCKET(3.14; 0; 9; 5) palauttaa 2.

Päivämäärä-aika toiminnot

SQL:ssä on kolme funktiota, jotka palauttavat nykyisen päivämäärän ja kellonajan.

  • CURRENT_DATE palauttaa nykyisen päivämäärän (kirjoita DATE).

Esimerkki: 2005-06-18.

  • CURRENT_TIME (numero ) palauttaa nykyisen ajan (TIME-tyyppi). Kokonaislukuparametri määrittää sekuntien esityksen tarkkuuden. Esimerkiksi arvo 2 edustaa sekunteja lähimpään sadasosaan (kaksi desimaalin tarkkuutta):

12:39:45.27.

  • CURRENT_TIMESTAMP (numero ) palauttaa päivämäärän ja kellonajan (TIMESTAMP-tyyppi). Esimerkiksi 2005-06-18 12:39:45.27. Kokonaislukuparametri määrittää sekuntien esityksen tarkkuuden.

Huomaa, että näiden funktioiden palauttama päivämäärä ja kellonaika eivät ole merkkityyppiä. Jos haluat esittää ne merkkijonoina, sinun tulee käyttää CAST()-tyypin muunnosfunktiota tähän.

Päivämäärä-aikafunktioita käytetään yleisesti kyselyissä tietojen lisäämiseen, päivittämiseen ja poistamiseen. Esimerkiksi myyntitietoja kirjattaessa nykyinen päivämäärä ja kellonaika syötetään tätä tarkoitusta varten varattuun sarakkeeseen. Kun kuukauden tai vuosineljänneksen tulokset on laskettu yhteen, raportointikauden myyntitiedot voidaan poistaa.

Lasketut lausekkeet

Lasketut lausekkeet rakennetaan vakioista (numeerinen, merkkijono, looginen), funktioista, kenttien nimistä ja muun tyyppisistä tiedoista yhdistämällä ne aritmeettisilla, merkkijono-, loogisilla ja muilla operaattoreilla. Lausekkeet puolestaan ​​voidaan yhdistää operaattoreita käyttämällä monimutkaisempia (yhdistetty) lausekkeita. Sulkeilla ohjataan lausekkeiden arviointijärjestystä.

Loogiset operaattorit AND, OR ja NOT ja funktiot on keskusteltu aiemmin.

Aritmeettiset operaattorit:

  • + lisäys;
  • - vähennyslasku;
  • * kertolasku;
  • / divisioona.

Merkkijonooperaattorivain yksi ketjutus- tai merkkijonojen ketjutusoperaattori (| |). Jotkut SQL:n toteutukset (kuten Microsoft Access) käyttävät (+)-merkkiä (| |)-merkin sijaan. Yhdistelmäoperaattori lisää toisen merkkijonon ensimmäisen esimerkin loppuun, lausekkeen:

"Sasha" | | "rakastaa" | | "heiluttaa"

palauttaa tämän seurauksena merkkijonon "Sasha loves Masha".

Kun kirjoitat lausekkeita, sinun on varmistettava, että operaattoreiden operandit ovat kelvollisia tyyppejä. Esimerkiksi lauseke: 123 + "Sasha" ei kelpaa, koska aritmeettista summausoperaattoria käytetään merkkijonooperandissa.

Lasketut lausekkeet voivat esiintyä SELECT-käskyn jälkeen sekä WHERE- ja HAVI-lausekkeiden ehtolausekkeissa N.G.

Katsotaanpa muutama esimerkki.

Anna Myynti-taulukon sisältää sarakkeet Tuotetyyppi, Määrä ja Hinta, ja haluamme tietää kunkin tuotetyypin tuoton. Voit tehdä tämän lisäämällä lausekkeen Määrä*hinta sarakeluetteloon SELECT-lauseen jälkeen:

VALITSE tuotetyyppi, määrä, hinta, määrä* hinta KUTEN

Yhteensä Myynnistä;

Tämä käyttää AS (as) -avainsanaa määrittämään lasketun datasarakkeen aliaksen.

Kuvassa Kuvassa 10 on alkuperäinen myyntitaulukko ja kyselyn tulostaulukko.

Riisi. 10. Kyselyn tulos ja tulolaskelma kunkin tuotetyypin osalta

Jos haluat saada selville kaikkien tavaroiden myynnistä saadut kokonaistulot, käytä seuraavaa kyselyä:

VALITSE SUMMA (Määrä*HINTA) Alkaen myynnistä;

Seuraava kysely sisältää laskettuja lausekkeita sekä sarakeluettelossa että WHERE-lauseen ehdoissa. Hän valitsee myyntitaulukosta tuotteet, joiden myyntitulot ovat yli 1000:

VALITSE tuotetyyppi, määrä*hinta yhteensä

Myynnistä

WHERE Määrä*Hinta > 1000;

Oletetaan, että haluat saada taulukon, jossa on kaksi saraketta:

Tuote, joka sisältää tuotteen tyypin ja hinnan;

Tulot sisältävä yhteensä.

Koska oletetaan, että alkuperäisessä myyntitaulukossa Product_Type-sarake on merkki (CHAR-tyyppi) ja Price-sarake on numeerinen, näiden sarakkeiden tietoja yhdistettäessä (liimattaessa) on tarpeen heittää numeerinen tyyppi merkkityyppiin käyttämällä CAST()-funktio. Tämän tehtävän suorittava kysely näyttää tältä (kuva 11):

VALITSE tuotetyyppi | | " (Hinta: " | | CAST(Hinta AS CHAR(5)) | | ")" AS tuote, määrä*hinta AS yhteensä

FROM Myynti;

Riisi. 11. Tulos kyselystä, joka yhdistää erityyppisiä tietoja yhteen sarakkeeseen

Huomautus. Microsoft Accessissa samanlainen kysely näyttäisi tältä:

VALITSE Tuotetyyppi + " (Hinta: " + C Str (hinta) + ")" AS-tuote,

Määrä*hinta AS yhteensä

FROM Myynti;

Ehdolliset lausekkeet CASE-lausekkeella

Perinteisissä ohjelmointikielissä on ehdolliset hyppyoperaattorit, joiden avulla voit ohjata laskentaprosessia sen mukaan, onko jokin ehto tosi vai ei. SQL:ssä tämä operaattori on CASE (tapaus, olosuhde, tapaus). SQL:2003:ssa tämä operaattori palauttaa arvon, joten sitä voidaan käyttää lausekkeissa. Sillä on kaksi päämuotoa, joita tarkastelemme tässä osiossa.

CASE-käsky arvoineen

Arvoja sisältävällä CASE-käskyllä ​​on seuraava syntaksi:

CASE checked_value

WHEN arvo1 NIIN tulos1

KUN arvo2 NIIN tulos2

. . .

KUN N:n arvo, NIIN N:n tulos

MUU tulosX

Varalta checked_value on yhtä kuin arvo1 , CASE-käsky palauttaa arvon tulos 1 , joka on määritetty THEN-avainsanan jälkeen. Muussa tapauksessa arvoa checked_value verrataan arvoon arvo2 , ja jos ne ovat yhtä suuret, palautetaan arvo tulos2. Muussa tapauksessa testattavaa arvoa verrataan seuraavaan WHEN-avainsanan jälkeen määritettyyn arvoon jne. Jos testattu_arvo ei ole yhtä suuri kuin mikään näistä arvoista, arvo palautetaan tulos X , joka on määritetty avainsanan ELSE (else) jälkeen.

Avainsana ELSE on valinnainen. Jos se puuttuu eikä mikään verrattavissa olevista arvoista ole yhtä suuri kuin testattava arvo, CASE-käsky palauttaa arvon NULL.

Oletetaan, että Clients-taulukon (katso kuva 1) perusteella haluat saada taulukon, jossa alueiden nimet korvataan niiden koodinumeroilla. Jos lähdetaulukossa ei ole liian monta eri aluetta, tämän ongelman ratkaisemiseksi on kätevää käyttää kyselyä CASE-operaattorilla:

VALITSE nimi, osoite,

CASE-alue

KUN "Moskova" SIIN "77"

KUN "Tverin alue" NIIN "69"

. . .

MUU alue

AS Aluekoodi

FROM asiakkailta;

CASE-lause hakuehdoilla

CASE-operaattorin toinen muoto sisältää sen käytön haettaessa taulukosta tietueita, jotka täyttävät tietyn ehdon:

CASE

MILLOIN ehto1 NIIN tulos1

KUN catch2 NIIN tulos2

. . .

KUN ehto N NIIN tulos N

MUU tulosX

CASE-käsky testaa, onko ehto1 tosi WHERE-lauseen määrittämän joukon ensimmäiselle tietueelle tai koko taulukolle, jos WHERE ei ole olemassa. Jos kyllä, CASE palauttaa tuloksen1. Muussa tapauksessa ehto2 tarkistetaan tälle tietueelle. Jos se on tosi, palautetaan arvo tulos2 jne. Jos mikään ehdoista ei ole tosi, palautetaan arvo tulos X , määritetty avainsanan ELSE jälkeen.

Avainsana ELSE on valinnainen. Jos se puuttuu eikä mikään ehdoista ole tosi, CASE-käsky kiertää NULL:n. Kun CASE:n sisältävä käsky on suoritettu ensimmäiselle tietueelle, se siirtyy seuraavaan tietueeseen. Tämä jatkuu, kunnes kaikki tietueet on käsitelty.

Oletetaan, että kirjataulukossa (nimi, hinta) sarake on NULL, jos vastaava kirja on loppunut. Seuraava kysely palauttaa taulukon, jossa lukee "Out of stock" NULL:n sijaan:

VALITSE otsikko,

CASE

KUN HINTA ON NOLLA, NIIN "Loppu loppu"

ELSE CAST (Hinta MERKINNÄ(8))

AS hinta

FROM kirjat;

Kaikkien saman sarakkeen arvojen on oltava samaa tyyppiä. Siksi tämä kysely käyttää CAST-tyypin muunnosfunktiota Hinta-sarakkeen numeeristen arvojen lähettämiseen merkkityyppiin.

Huomaa, että voit aina käyttää CASE-käskyn toista muotoa ensimmäisen sijasta:

CASE

KUN testattu_arvo = arvo1 NIIN tulos1

KUN testattu_arvo = arvo2 NIIN tulos2

. . .

WHEN checked_value = arvo N SIIN tulosN

MUU tulos

NULLIF- ja COALESCE-toiminnot

Joissakin tapauksissa, varsinkin tietojen päivityspyynnöissä (UPDATE-operaattori), on kätevää käyttää kompaktimpia NULLIF() (NULL if)- ja COALESCE() (yhdistetty) -funktioita hankalan CASE-operaattorin sijaan.

NULLIF-funktio ( arvo1, arvo2) palauttaa NULL:n, jos ensimmäisen parametrin arvo vastaa toisen parametrin arvoa, jos se ei täsmää, ensimmäisen parametrin arvo palautetaan muuttumattomana. Eli jos yhtälö arvo1 = arvo2 on tosi, funktio palauttaa arvon NULL, muuten arvon arvo1.

Tämä funktio vastaa CASE-käskyä seuraavassa kahdessa muodossa:

  • CASE-arvo1

WHEN arvo2 THEN NULL

MUU arvo1

  • CASE

KUN arvo1 = arvo2 NIIN NULL

MUU arvo1

Funktio COALESCE( arvo1, arvo2, ... , arvo N) hyväksyy arvoluettelon, joka voi olla joko NULL tai NULL. Funktio palauttaa määritetyn arvon luettelosta tai NULLin, jos kaikki arvot ovat määrittelemättömiä.

Tämä funktio vastaa seuraavaa CASE-käskyä:

CASE

KUN arvo 1 EI OLE NOLLA, NIIN arvo 1

KUN arvo 2 EI OLE NULL, NIIN arvo 2

. . .

KUN arvo N EI OLE NULL, NIIN arvo N

MUUTEN NULL

Oletetaan, että Kirjat (nimi, hinta) -taulukossa Hinta-sarake on NULL, jos vastaava kirja on loppunut. Seuraava kysely palauttaa taulukon jossa sen sijaan TYHJÄ Näyttöön tulee teksti "Out of stock":

VALITSE nimi, COALESCE (CAST (CAST(HINTA CHAR(8)),

"Ei varastossa") AS-hinta

FROM kirjat;

Tässä opetusohjelmassa opit käyttämään MySQL:ää SUMMA-toiminto syntaksin ja esimerkkien kanssa.

Kuvaus

MySQL-toiminto SUMMA palauttaa lausekkeen kokonaisarvon.

Syntaksi

MySQL SUM -funktion syntaksi:

TAI SUMMA-funktion MySQL-syntaksi ryhmiteltäessä tuloksia yhden tai useamman sarakkeen mukaan on:

Parametrit tai argumentit

lauseke1 , lauseke2 , ... lauseke_n ovat lausekkeita, joita ei ole kapseloitu SUM-funktioihin ja jotka on sisällytettävä GROUP BY -lauseeseen SQL-käskyn lopussa.

aggregate_expression on sarake tai lauseke, joka yhdistetään.

taulukot - taulukot, joista haluat saada tietueita. FROM-lauseessa on oltava vähintään yksi taulukko.

WHERE ehdot - valinnainen. Nämä ovat ehdot, jotka valittujen tietueiden on täytettävä.

Sovellus

SUM-funktiota voidaan käyttää seuraavissa MySQL-versioissa:

  • MySQL 5.7, MySQL 5.6, MySQL 5.5, MySQL 5.1, MySQL 5.0, MySQL 4.1, MySQL 4.0, MySQL 3.23

Esimerkki yksittäisestä lausekkeesta

Katsotaanpa esimerkkejä MySQL SUM -funktiosta ymmärtääksemme, kuinka SUM-funktiota käytetään MySQL:ssä.

Sinun on esimerkiksi tiedettävä, mikä on kaikkien työntekijöiden, joiden palkka on yli 20 000 dollaria, yhteenlaskettu kokonaispalkka.

Tässä SUM-funktion esimerkissä lausekkeelle SUM(palkka) on annettu alias "Kokonaispalkka". Tämän seurauksena "Kokonaispalkka" näytetään kentän nimenä, kun tulosjoukko palautetaan.

Esimerkki käyttämällä DISTINCT

Voit käyttää DISTINCT-lausetta SUM-funktiossa. Esimerkiksi alla oleva SQL-lause palauttaa yksilöllisten palkkaarvojen yhdistetyn kokonaispalkan, kun palkka on yli 20 000 dollaria vuodessa.

Jos molemmat palkat olisivat 10 000 dollaria vuodessa, SUMMA-funktio käyttäisi vain toista näistä arvoista.

Esimerkki kaavalla

SUM-funktion sisältämän lausekkeen ei tarvitse olla yksittäinen kenttä. Voit myös käyttää kaavaa. Voit esimerkiksi laskea kokonaispalkkion.

MySQL

SELECT SUM(myynti * 0,05) AS "Total Commission" tilauksista;

SELECT SUM (myynti*0,05)AS "Kokonaispalkkio"

FROM tilauksista;

Esimerkki GROUP BY:stä

Joissakin tapauksissa sinun on käytettävä GROUP BY -lausetta SUM-funktion kanssa.

Voit esimerkiksi käyttää SUMMA-funktiota palauttamaan osaston (osaston nimi) ja kokonaismyynnin (vastaavan osaston myynti).

Kuvaa aritmeettisten operaattorien käyttöä ja laskettujen sarakkeiden rakentamista. Lopulliset (koonti)funktiot COUNT, SUM, AVG, MAX, MIN otetaan huomioon. Tarjoaa esimerkin GROUP BY -operaattorin käyttämisestä tiedonvalintakyselyiden ryhmittelyyn. Kuvaa HAVING-lauseen käyttöä.

Laskettujen kenttien rakentaminen

Yleensä luomiseen laskettu (johdettu) kenttä SELECT-luettelon täytyy sisältää jokin SQL-lauseke. Nämä lausekkeet käyttävät aritmeettisia yhteen-, vähennys-, kerto- ja jakolaskuoperaatioita sekä sisäänrakennettuja SQL-funktioita. Voit määrittää minkä tahansa taulukon tai kyselyn sarakkeen (kentän) nimen, mutta käytä vain sen taulukon tai kyselyn sarakkeen nimeä, joka on lueteltu vastaavan käskyn FROM-lauseluettelossa. Monimutkaisia ​​lausekkeita rakennettaessa voidaan tarvita sulkeita.

SQL-standardien avulla voit määrittää nimenomaisesti tuloksena olevan taulukon sarakkeiden nimet, joille AS-lausetta käytetään.

VALITSE Tuote.Nimi, Tuote.Hinta, Tarjous.Määrä, Tuote.Hinta*Tarjous.Määrä KUSTANNUKSENA Tuotteesta SISÄINEN LIITTYMINEN Tuotteeseen.ProductCode=Deal.ProductCode Esimerkki 6.1. Jokaisen tapahtuman kokonaiskustannusten laskeminen.

Esimerkki 6.2. Hanki luettelo yrityksistä, joissa on asiakkaiden sukunimet ja nimikirjaimet.

SELECT Yritys, sukunimi+""+ vasen(etunimi,1)+"."+vasen(keskinimi,1)+"."AS koko nimi asiakkaalta Esimerkki 6.2. Hankitaan luettelo yrityksistä, joissa on asiakkaiden sukunimet ja alkukirjaimet.

Pyynnössä käytetään sisäänrakennettua Left-toimintoa, jonka avulla voit tässä tapauksessa leikata yhden merkin vasemmalta tekstimuuttujaan.

Esimerkki 6.3. Hanki luettelo tuotteista, joissa näkyy myyntivuosi ja -kuukausi.

SELECT Product.Name, Year(Transaction.Date) AS Vuosi, kuukausi(Tapahtuma.Pvm) AS KUUKAUSI TUOTTEEN SISÄLLÄ JOIN Tapahtumasta Product.ProductCode=Transaction.ProductCode Esimerkki 6.3. Saat luettelon tuotteista, joissa näkyy myyntivuosi ja -kuukausi.

Kysely käyttää sisäänrakennettuja funktioita Vuosi ja kuukausi poimimaan vuoden ja kuukauden päivämäärästä.

Yhteenvetofunktioiden käyttö

Käyttämällä lopulliset (aggregaatti) toiminnot SQL-kyselyn sisällä voit saada useita yleisiä tilastotietoja tulosjoukon valittujen arvojen joukosta.

Käyttäjällä on pääsy seuraaviin perustoimintoihin yhteenvetofunktiot:

  • Count (Expression) - määrittää tietueiden määrän SQL-kyselyn tulosjoukossa;
  • Min/Max (lauseke) - määritä pienin ja suurin arvojoukosta tietyssä pyyntökentässä;
  • Keskiarvo (lauseke) - tämän toiminnon avulla voit laskea kyselyllä valittuun tiettyyn tietuekenttään tallennettujen arvojen keskiarvon. Se on aritmeettinen keskiarvo, ts. arvojen summa jaettuna niiden lukumäärällä.
  • Summa (lauseke) – Laskee kyselyllä valittujen tietueiden tietyssä kentässä olevien arvojen summan.

Useimmiten lausekkeina käytetään sarakkeiden nimiä. Lauseke voidaan laskea myös useiden taulukoiden arvoilla.

Kaikki nämä funktiot toimivat taulukon yhden sarakkeen arvoilla tai aritmeettisella lausekkeella ja palauttavat yhden arvon. Funktiot COUNT , MIN ja MAX koskevat sekä numeerisia että ei-numeerisia kenttiä, kun taas SUM- ja AVG-funktioita voidaan käyttää vain numeerisille kentille, paitsi COUNT(*) . Kun lasketaan minkä tahansa funktion tuloksia, kaikki nolla-arvot poistetaan ensin, ja sitten vaadittu toimenpide sovelletaan vain jäljellä oleviin tiettyihin sarakearvoihin. COUNT(*)-vaihtoehto on COUNT-funktion erityinen käyttötapaus, jonka tarkoitus on laskea tuloksena olevan taulukon kaikki rivit riippumatta siitä, sisältääkö se nollakohtia, kaksoiskappaleita tai muita arvoja.

Jos sinun on poistettava päällekkäiset arvot ennen yleisen funktion käyttämistä, sinun on edeltävä sarakkeen nimi funktion määrittelyssä avainsanalla DISTINCT. Sillä ei ole merkitystä MIN- ja MAX-funktioille, mutta sen käyttö voi vaikuttaa SUM- ja AVG-toimintojen tuloksiin, joten sinun on harkittava, pitäisikö se olla läsnä jokaisessa tapauksessa. Lisäksi DISTINCT-avainsana voidaan määrittää vain kerran kyselyssä.

On erittäin tärkeää huomata se yhteenvetofunktiot voidaan käyttää vain luettelossa SELECT-lauseessa ja osana HAVING-lausetta. Kaikissa muissa tapauksissa tätä ei voida hyväksyä. Jos SELECT-lauseen luettelo sisältää yhteenvetofunktiot, ja kyselyteksti ei sisällä GROUP BY -lausetta, joka mahdollistaa tietojen yhdistämisen ryhmiin, silloin mikään SELECT-lauseen listaelementeistä ei voi sisältää viittauksia kenttiin, paitsi jos kentät toimivat argumentteina lopulliset toiminnot.

Esimerkki 6.4. Määritä tuotteen ensimmäinen aakkosellinen nimi.

VALITSE Min(Tuotteen nimi) AS Miniminimi Tuotteesta Esimerkki 6.4. Tuotteen ensimmäisen aakkosllisen nimen määrittäminen.

Esimerkki 6.5. Määritä tapahtumien määrä.

SELECT Count(*) AS Sopimusten_määrä TARJOUKSISTA Esimerkki 6.5. Määritä tapahtumien määrä.

Esimerkki 6.6. Määritä myytyjen tavaroiden kokonaismäärä.

SELECT Sum(Dal.Quantity) AS Nimikkeen_määrä Sopimuksesta Esimerkki 6.6. Myytyjen tavaroiden kokonaismäärän määrittäminen.

Esimerkki 6.7. Määritä myytyjen tavaroiden keskihinta.

SELECT Avg(Product.Price) AS Avg_Price FROM FROM SISÄINEN LIITTYMINEN Deal ON Product.ProductCode=Deal.ProductCode; Esimerkki 6.7. Myytyjen tavaroiden keskihinnan määrittäminen.

VALITSE Summa(Tuote.Hinta*Tapahtuma.Määrä) Kustannukseksi Tuotteesta SISÄINEN LIITTYMINEN -tapahtuma Product.ProductCode=Transaction.ProductCode Esimerkki 6.8. Myytyjen tavaroiden kokonaiskustannusten laskeminen.

GROUP BY lauseke

Kyselyt vaativat usein välisummien luomista, mikä yleensä ilmaistaan ​​ilmaisulla "jokaiselle..." kyselyssä. GROUP BY -lausetta käytetään SELECT-käskyssä tähän tarkoitukseen. Kyselyä, joka sisältää GROUP BY:n, kutsutaan ryhmittelykyselyksi, koska se ryhmittelee SELECT-operaation palauttamat tiedot ja luo sitten yhden yhteenvetorivin kullekin yksittäiselle ryhmälle. SQL-standardi edellyttää, että SELECT-lause ja GROUP BY -lause liittyvät läheisesti toisiinsa. Kun SELECT-käsky sisältää GROUP BY -lauseen, jokaisella SELECT-lauseen luetteloelementillä on oltava yksi arvo koko ryhmälle. Lisäksi SELECT-lause voi sisältää vain seuraavan tyyppisiä elementtejä: kenttien nimet, yhteenvetofunktiot, vakiot ja lausekkeet, jotka sisältävät yllä lueteltujen elementtien yhdistelmiä.

Kaikkien SELECT-lauseessa lueteltujen kenttien nimien on oltava myös GROUP BY -lauseessa - ellei sarakkeen nimeä käytetä lopullinen toiminto. Käänteinen sääntö ei pidä paikkaansa - GROUP BY -lause voi sisältää sarakkeiden nimiä, jotka eivät ole SELECT-lauseen luettelossa.

Jos WHERE-lausetta käytetään yhdessä GROUP BY:n kanssa, se käsitellään ensin ja vain ne rivit, jotka täyttävät hakuehdon, ryhmitellään.

SQL-standardi määrittelee, että ryhmittelyssä kaikki puuttuvat arvot käsitellään tasa-arvoisina. Jos kahdella taulukon rivillä samassa ryhmittelysarakkeessa on NULL-arvo ja samat arvot kaikissa muissa ei-nolla-ryhmittelysarakkeissa, ne sijoitetaan samaan ryhmään.

Esimerkki 6.9. Laske kunkin asiakkaan tekemien ostosten keskimääräinen määrä.

SELECT Client.LastName, Avg(Transaction.Quantity) AS Average_Quantity FROM Client SISÄINEN JOIN Kauppa Client.ClientCode=Transaction.ClientCode GROUP BY Client.LastName Esimerkki 6.9. Laske kunkin asiakkaan tekemien ostosten keskimääräinen määrä.

Ilmaus "jokainen ostaja" näkyy SQL-kyselyssä lauseen muodossa GROUP BY Client.LastName.

Esimerkki 6.10. Määritä, kuinka paljon kukin tuote myytiin.

VALITSE Tuote.Nimi, Summa(Tuote.Hinta*Tapahtuma.Määrä) Kustannuksina Tuotteesta SISÄINEN LIITTYMINEN Deal ON Product.ProductCode=Transaction.ProductCode GROUP BY Product.Name Esimerkki 6.10. Sen määrittäminen, kuinka paljon kukin tuote myytiin.

SELECT Client.Company, Count(Transaction.TransactionCode) AS Tapahtumien_määrä Asiakkaalta SISÄINEN JOIN Tapahtuma Client.ClientCode=Transaction.ClientCode RYHMÄ Client.Company Esimerkki 6.11. Kunkin yrityksen suorittamien liiketoimien lukumäärän laskeminen.

VALITSE Asiakas.Yritys, Summa(Tapahtuma.Määrä) AS Kokonaismäärä, Summa(Tuote.Hinta*Tapahtuma.Määrä) AS Kustannus TUOTTEEN SISÄLITTYMISESTÄ (Customer INNER JOIN Transaction ON Customer.ClientCode=Transaction.CustomerTProducnsatCode=Tuotekoodi) .Tuotekoodi GROUP BY Client.Company Esimerkki 6.12. Kullekin yritykselle ostettujen tavaroiden kokonaismäärän ja sen kustannusten laskeminen.

Esimerkki 6.13. Määritä kunkin tuotteen kokonaiskustannukset jokaiselle kuukaudelle.

VALITSE Tuote.Nimi, Kuukausi(Tapahtuma.Pvm) AS Kuukausi, Summa(Tuote.Hinta*Tapahtuma.Määrä) AS Kustannukset Tuotteesta SISÄINEN LIITTYMINEN Tuote.Tuotekoodi=Tapahtuma.TuotekoodiRYHMÄ TUOTTEEN MUKAAN, Kuukausi(Tapahtuma.Pvm.) ) Esimerkki 6.13. Kunkin tuotteen kokonaiskustannusten määrittäminen kuukausittain.

Esimerkki 6.14. Määritä kunkin ensiluokkaisen tuotteen kokonaiskustannukset jokaiselle kuukaudelle.

SELECT Tuote.Nimi, kuukausi(Tapahtuma.Pvm) AS Kuukausi, Summa(Tuote.Hinta*Tapahtuma.Määrä) AS Kustannukset Tuotteesta SISÄINEN LIITTYMINEN Tuote.Tuotekoodi=Tapahtuma.Tuotekoodi WHERE Product.Grade="First" GROUP BY Product. .Nimi, kuukausi(tapahtuma.päivämäärä) Esimerkki 6.14. Kunkin ensiluokkaisen tuotteen kokonaiskustannusten määrittäminen kuukausittain.

ON TARJOUS

Käyttämällä HAVINGiä kaikki tietolohkot, jotka on aiemmin ryhmitelty käyttämällä GROUP BY:tä ja jotka täyttävät HAVING-kohdassa määritetyt ehdot, näkyvät. Tämä on lisävaihtoehto lähtöjoukon "suodattamiseen".

HAVING-ehdot ovat erilaiset kuin WHERE:

  • HAVING sulkee pois ryhmät, joilla on aggregoituja arvotuloksia tuloksena olevasta tietojoukosta;
  • WHERE jättää pois tietueet, jotka eivät täytä ehtoa, laskettaessa aggregoituja arvoja ryhmittelyn mukaan;
  • Kokoonpanofunktioita ei voi määrittää WHERE-hakuehdossa.

Esimerkki 6.15. Tunnista yritykset, joiden tapahtumien kokonaismäärä on ylittänyt kolme.

SELECT Client.Company, Count(Trade.Quantity) AS Number_of_deals FROM Client SISÄINEN LIITTYMINEN Kauppa Client.ClientCode=Transaction.ClientCode RYHMÄ Client.Company HAVING Count(Transaction.Quantity)>3 Esimerkki 6.15. Niiden yritysten tunnistaminen, joiden liiketoimien kokonaismäärä ylitti kolme.

Esimerkki 6.16. Näytä luettelo tuotteista, jotka on myyty yli 10 000 ruplaa.

VALITSE tuote.Nimi, summa(Tuotteen hinta*tarjous.Määrä) KUSTANNUKSENA TUOTTEEN SISÄLIITTYMISESTÄ Deal ON Product.ProductCode=Transaction.ProductCode RYHMÄ TUOTTEEN MUKAAN. Esimerkki 6.16. Näyttää luettelon tavaroista, jotka on myyty yli 10 000 ruplaa.

Esimerkki 6.17. Näytä luettelo tuotteista, joita on myyty yli 10 000 hinnalla ilman, että määrität määrää.

VALITSE TUOTE.NIMI tuotteesta SISÄINEN LIITTYMINEN Deal ON Product.ProductCode=Deal.ProductCode GROUP BY BY Product.Name HAVING Sum(Product.Price*Transaction.Quantity)>10000 Esimerkki 6.17. Näytä luettelo yli 10 000 myydyistä tuotteista ilman, että määrität määrää.