Contacte

Calcule în SQL. Calculați numărul de înregistrări din grupuri (create de grup de) SQL Numărarea numărului de înregistrări cu condiție

există o cerere a formularului:

Selectați i. *, Numără (*) ca valute, suma (ig.quantity) ca totală, suma (g.price * ig.quantity) ca preț, cnabă ca CNAME de la factură ca I, factoice_goods ca Ig, bun g În stânga monedă C on (c.id \u003d g.currency) în cazul în care ig.invoice_id \u003d i.id și g.Id \u003d ig.good_id grup de g.Currency Ordin de către i.date desc;

acestea. Lista comenzilor este selectată, în care se consideră costul total al mărfurilor în diferite valute (moneda este instalată în bunuri, coloana CNAME ca rezultat - numele monedei)

trebuie să primiți numărul de intrări cu același I.Id În coloana Rezultatul monedelor, cu toate acestea, experimentele cu numărul () parametrii nu au condus la nimic - întotdeauna returnează 1

Întrebare: Este posibil să se întâmple în coloana monedelor? Acestea. Dacă produsele sunt comandate cu prețuri în 3 valute diferite, valute \u003d 3?

Prea mare libertate permite MySQL la SQL, totuși. Ce înseamnă i. * În contextul acestei selecții? Toate coloanele tabelului de facturare? Deoarece nu se aplică nicio funcție de grup, ar fi plăcut să fiți enumerați în grup, altfel principiul de grupare a liniilor nu este complet clar. Dacă aveți nevoie să obțineți toate produsele pe toate comenzile din reducerea valutelor, acesta este unul dacă aveți nevoie să obțineți toate produsele grupate de valute în contextul fiecărei comenzi, este complet diferită.
Pe baza selecției dvs., puteți să vă asumați următoarea structură de date:
Tabelul de facturare:

Tabelul Invoice_goods:

Masă de mărfuri:

Moneda de masă:

Care va fi selecția dvs. actuală înapoi? În teorie, el se va întoarce pentru fiecare ordine de n-rânduri pentru fiecare monedă în care există produse în această ordine. Dar, datorită faptului că nu există nimic în grup de G.Currency, nu este evident :), în plus, coloana C.Briefly contribuie, de asemenea, la formarea implicită a grupurilor. Ceea ce avem în cele din urmă, pentru fiecare combinație unică a lui I., G.Currency și C.Briefly se va forma un grup la linia din care vor fi aplicate funcțiile sumelor și numerelor. Faptul că, ca rezultat al jocului cu parametrul de numărare, ați ieșit întotdeauna 1 înseamnă că a existat o singură înregistrare în grupul rezultat (adică grupurile nu sunt formate așa cum este necesar, puteți descrie cerințele în detaliu? ). Din întrebarea dvs. nu este clar că doriți să știți câte valute au participat în ordine sau câte ordine au fost în această monedă? În primul caz, sunt posibile mai multe opțiuni, totul depinde de posibilitățile MySQL, în cea de-a doua este necesară pentru a scrie o expresie selectată într-un mod diferit.

Prea mare libertate permite MySQL la SQL, totuși. Ce înseamnă i. * În contextul acestei selecții? Toate coloanele tabelului de facturare?

Da, este. Dar rolul mare nu se joacă, pentru că Util în acest caz printre care (coloane) nr. Lasa eu. * Va fi. Pentru definiție.

Care va fi selecția dvs. actuală înapoi? În teorie, el se va întoarce pentru fiecare ordine de n-rânduri pentru fiecare monedă în care există produse în această ordine. Dar, datorită faptului că nu există nimic în grup prin nimic, cu excepția G.Currency, nu este evident :),

Exact.
El va returna următoarele (în acest exemplu de la mine aleg doar ID-ul și nu toate coloanele):

iD.valuteletotalprețcNAME.
33 1 1.00 198.00 Bf.
33 1 4.00 1548.04 FRECA
În plus, coloana C.Briefly contribuie, de asemenea, la formarea implicită a grupurilor.

Cum? De C.ID \u003d g.Currency există o legătură de tabele și gruparea prin g.Currency.

Faptul că, ca rezultat al jocului cu parametrul de numărare, ați ieșit întotdeauna 1 înseamnă că doar o singură intrare a fost în grupul rezultat

Nu, grupul a fost construit din 1Y. Intrări. În măsura în care am înțeles-o, contează () se întoarce 1 de aceea (la urma urmei, coloanele care în grup diferă (deși, cu excepția coloanei monetare), sunt create de funcții agregate).

(I.E. Grupurile nu sunt formate, deoarece aveți nevoie, puteți descrie cerințele în detaliu?).

Grupurile sunt formate, deoarece este necesar fiecare grup - aceasta este valoarea surpră a mărfurilor în fiecare monedă. Cu toate acestea, eu, în plus față de trebuie să calculeze cât de mult La fel elemente B. Acest grup.

Din întrebarea dvs. nu este clar că doriți să știți câte valute au participat în ordine sau câte ordine au fost în această monedă?

Da, a câștigat puțin. Doar mai întâi.

dMIG [Dosar]
În cadrul participării "implicite" la formarea grupului, vreau să spun că, dacă coloana nu este specificată în grup și, în același timp, nu este un argument al unei funcții de grup, rezultatul selectorului va fi identic cu modul în care Acest difuzor a fost specificat în grup prin. Selecția dvs. și selectorul de mai jos vor afișa absolut același rezultat (nu acordați atenție să vă alăturați, i-am adus pur și simplu într-un singur format de înregistrare):

Selectați I.Id ID, numără (*) Monede, suma (Ig.QUANTITY) Total, suma (G.Price * Ig.Quantity) Preț, C.Briefly CNAME de la factura I Alăturați-vă Invoice_Goods Ig on (Ig.invoice_id \u003d i. ID) Alăturați-vă binelui G pe (G.ID \u003d Ig.Good_ID) Stânga exterior Înscrieți moneda C on (C.ID \u003d g.currency) de către i.id, c.briefly

Se pare că, în fiecare rând din eșantionul rezultat, există una și o singură monedă (dacă ar fi diferită, atunci liniile ar fi două). Despre ce elemente în acest caz este? Despre puncte de comandă? Apoi selectorul dvs. este absolut corect, doar pentru această monedă, în acest scop doar un singur element.
Să ne uităm la schema de date:

  1. Într-o singură ordine, multe puncte (linii), nu?
  2. Fiecare articol este bunurile din directorul de mărfuri, nu?
  3. Fiecare produs are o monedă definită (și o singură), rezultă din C.ID \u003d g.Currency, nu?

Câte valute în ordine? Atât de mult cât de multe puncte în ea cu valute diferite.
Pentru a plia g.robrice * iig.quantity are sens doar pentru puncte într-o singură monedă;) (deși kilometri cu ceas poate fi de asemenea adăugat :) Deci, ce nu vă potrivește!? Afirmați că aveți nevoie de câte monede au participat la comandă
Și în acest caz, acest lucru se face în cadrul aceleiași selecții fără nici un truc (cel mai probabil nu va trage MySQL) nu va funcționa; (
Din păcate, nu sunt un semn al MySQL. În Oracle, puteți face o selecție, dar vă va ajuta acest sfat? Improbabil;)

# Într-o singură comandă, o varietate de articole (linii), nu?
Fiecare articol este bunurile din directorul de mărfuri, nu?
# Fiecare produs are o monedă definită (și o singură), rezultă din C.ID \u003d G.Currency, nu?

Asa de.
O singură comandă: o intrare în tabelul de facturare, acesta corespunde intrărilor n (\u003e 0) din Invoice_goods, fiecare din care corespunde unei intrări în tabelul de mărfuri, înregistrarea "valută" în fiecare dintre care, la rândul său, corespunde Prima înregistrare din tabelul valutar (Înălțați în stânga - În cazul editării unei cărți de referință a mâinilor curbe - tipurile Myisam nu acceptă tastele externe).

Câte valute în ordine? Atât de mult cât de multe puncte în ea cu valute diferite.

Da exact.

Pentru a plia g.robrice * iig.quantity este sens doar pentru puncte într-o monedă;) (deși kilometri cu un ceas, puteți adăuga și :)

De aceea există un grup de ID de valută (G.Currency).

În Oracle, puteți face o selecție, dar vă va ajuta acest sfat?

Mb.
Am vorbit puțin cu Oracle, cu semn PL / SQL.

Opțiunea numărul 1.

Selectați a. *, Count (*) peste (partition by A.Id) de la (selectați i.ID ID, suma (iG.QUANTITY) Total, suma (g.price * ig.quantity) preț, cnabă C.Briest CNAME De la factura i se alăture lui Invoice_Goods ig on (ig.invoice_id \u003d i.Id) Alăturați-vă binelui G pe (G.ID \u003d Ig.Good_ID) Stânga exterior Înscrieți moneda C on (C.ID \u003d g.currency) de către i.ID, C.brietate) A.

Aceasta utilizează așa-numita. Funcția analitică. Cu o probabilitate de 99% nu funcționează în MySQL.

Opțiunea numărul 2.
Se creează o funcție, de exemplu, numărări, care, prin ordinul de identificare, returnează un număr de valute care au participat la acesta și apoi:

Selectați I.Id ID, Numărătoare (I.ID) Monedele, suma (Ig.QUANTITY) Total, suma (G.Price * Ig.QUANTITY) Preț, C.Briefly CNAME de la factura I Înscriere Invoice_Goods Ig on (ig.invoice_id \u003d I.ID) Alăturați-vă binelui G pe (G.ID \u003d Ig.Good_ID) Stânga Outer Alăturați moneda C on (C.ID \u003d g.currency) de către i.ID, c.briefly, numărări (i.Id)

Se poate rula ... dar va fi chemat pentru fiecare monedă a fiecărei comenzi. Nu știu dacă MySQL face să facă grupul prin funcție ...

Opțiunea numărul 3.

Selectați I.ID ID, AGR.CNT Monede, suma (iG.QUANTITY) Total, suma (G.Price * Ig.Quartity) Preț, C.Briefly CNAME de la factura I Alăturați-vă Invoice_goods Ig on (Ig.invoice_id \u003d I.ID ) Alăturați-vă binelui G pe (G.ID \u003d Ig.Good_ID) stânga exterior Înscrieți-vă moneda C on (C.ID \u003d g.currency) rămase în aer liber (selectați II.ID, număr (distinct GG.Currency) CNT de la factura II, INVOCE_GOODS IIG, bun GG unde II.ID \u003d IIG.INVOICE_ID ȘI GG.ID \u003d IG.GOOD_ID GROUP by II.ID) Grupul AGR pe (i.ID \u003d AGR.ID) Grupul de la I.Id, C.Briefly, AGR. Cnt.

Probabil cea mai corectă ... și este foarte posibilă versiunea cea mai de lucru a tuturor.

Cea mai rapidă versiune numărul 1. №2 este cea mai ineficientă, deoarece Cele mai multe valute în ordine, cu atât mai des sunt luate în considerare.
Nr. 3 este, de asemenea, în principiu, nu cea mai bună viteză, dar cel puțin este posibil să se facă cache-ul în cadrul DBMS.

rezultatul tuturor celor trei selectori va fi următorul:

iD. Valutele TotalprețcNAME.
33 2 1.00 198.00 Bf.
33 2 4.00 1548.04 FRECA

pentru același ID al figurii din coloana monedelor va fi întotdeauna aceeași, este ceea ce aveți nevoie?

Este descrisă utilizarea operatorilor aritmetici și construcția de coloane calculate. Sunt luate în considerare funcțiile finale (agregate) ale numărului, sumelor, AVG, max, min. Un exemplu de utilizare a grupului de către operator pentru gruparea solicitărilor de eșantionare a datelor. Descrie aplicarea ofertei care are.

Construirea câmpurilor calculate

În general, pentru a crea calculat (derivat) În lista Selectați, specificați o anumită expresie de limbă SQL. În aceste expresii, se utilizează operațiuni aritmetice de adăugare, scădere, multiplicare și divizare, precum și funcțiile de limbă SQL încorporate. Puteți specifica numele oricărei coloane (câmpuri) a unei mese sau a unei interogări, dar pentru a utiliza numele coloanei numai tabelul sau interogarea care sunt enumerate în lista ofertei din instrucțiunile relevante. Atunci când construiesc expresii complexe, pot fi necesare paranteze.

Standardele SQL vă permit să setați în mod explicit numele tabelelor coloanei rezultate, pentru care se utilizează fraza.

Selectați produsul. Notă, produs. Preț, Tranzacție. Natură, produs. Preț * Tranzacție. Naltal ca cost din bunuri Inner Alăturați-vă pe bunuri. Surse de alimentare \u003d tranzacție. Exemplul 6.1. Așteptând un cost total pentru fiecare tranzacție.

Exemplul 6.2. Obțineți o listă de firme cu numele și inițialele clienților.

Selectare firmă, prenume + "+ stânga (nume, 1) +". + Stânga (patronymic, 1) + "." Ca nume complet de la Exemplul 6.2. Obținerea unei liste de firme cu numele și inițialele clienților.

Interogarea utilizează funcția stângă încorporată, care vă permite să tăiați un simbol în acest caz în variabila de text.

Exemplul 6.3. Obțineți o listă de produse care indică anul și luna de vânzare.

Selectați produsul. Notă, anul (Deal. Date), pe an, lună (date) ca lună de la bunuri Inner Alăturați-vă pe Commodity.stovar \u003d Tranzacție Exemplul 6.3. Obținerea unei liste de bunuri care indică anul și luna de vânzare.

Interogarea utilizează funcții de an și lună încorporate pentru a evidenția anul și luna de la data.

Folosind funcțiile finale

Prin intermediul funcțiile totale (agregate) În cadrul solicitării SQL, puteți obține un număr de informații statistice de generalizare despre setul de valori selectate setate de ieșire.

Utilizatorul este disponibil pentru următorul principal principal funcțiile finale:

  • Numărul (expresia) - determină numărul de intrări din setul de ieșire de solicitare SQL;
  • Min / max (expresie) - determină cele mai mici și cele mai mari valori în unele domenii de interogare;
  • AVG (Expression) - Această caracteristică vă permite să calculați valoarea medie a setului de valori stocate într-un anumit domeniu de înregistrări selectate. Este o valoare medie aritmetică, adică Cantitatea de valori împărțite la numărul lor.
  • Suma (expresie) - calculează cantitatea de valori multiple conținute într-un anumit câmp selectat înregistrări selectate.

Cel mai adesea, numele coloanelor iese ca o expresie. Expresia poate fi calculată de valorile mai multor mese.

Toate aceste funcții sunt operate cu valori într-o coloană de masă sau cu o expresie aritmetică și returnează singura valoare. Funcțiile de numărare, min și max sunt aplicabile atât câmpurilor numerice, cât și cele nefumerice, în timp ce funcțiile sumelor și AVG pot fi utilizate numai în cazul câmpurilor numerice, cu excepția numărului (*). La calcularea rezultatelor oricăror funcții, toate valorile goale sunt excluse mai întâi, după care operația necesară se aplică numai valorilor specifice ale coloanei rămase ale coloanei. Opțiunea Count (*) este un caz special de utilizare a funcției de numărare, scopul său constă în numărarea tuturor rândurilor din tabelul rezultat, indiferent dacă există goale, duplicate sau orice alte valori.

Dacă, înainte de a aplica o funcție de generalizare, este necesar să excludeți valorile duplicate, înainte de numele coloanei în definiția funcției, puneți cuvântul cheie distinct. Nu are sens pentru funcțiile min și max, însă utilizarea sa poate afecta rezultatele efectuării funcțiilor de performanță și AVG, deci este necesar să se gândească în prealabil dacă ar trebui să fie prezentă în fiecare caz particular. În plus, cuvântul cheie distinct poate fi specificat în orice cerere nu mai mult de o dată.

Este foarte important să rețineți că funcțiile finale Pot fi utilizate numai în lista de propuneri selectată și ca parte a ofertei care are. În toate celelalte cazuri, este inacceptabilă. Dacă lista din clauza SELECT conține funcțiile finale, iar în textul interogării nu există nici un grup de frază, furnizarea de date care să combine în grupuri, nimeni din elementele propunerii selectate ale selecției poate include nicio referire la câmpuri, cu excepția situației în care domeniile acționează ca argumente funcțiile finale.

Exemplul 6.4. Determinați primul alfabet pentru produs.

Selectați min (produs. Notă) ca min_alling de la bunuri Exemplul 6.4. Definiția primului alfabet al numelui bunurilor.

Exemplul 6.5. Determinați numărul de tranzacții.

Selectați numărul (*) ca număr de la tranzacție Exemplul 6.5. Determinați numărul de tranzacții.

Exemplul 6.6. Determină cantitatea totală de bunuri vândute.

Selectați suma (tranzacție. Naționalitate) ca număr_shovar de la tranzacție Exemplul 6.6. Determinarea numărului total de bunuri vândute.

Exemplul 6.7. Determină prețul mediu al bunurilor vândute.

Selectați AVG (produs. PRET) AS AVG_THEREN de la bunuri Inner Alăturați-vă pe Mărfuri.Stabilakovar \u003d Tranzacție. Surse de alimentare; Exemplul 6.7. Determinarea prețului mediu al mărfurilor vândute.

Selectați suma (produs. Preț * Tranzacție. Naționalitate) În calitate de cost din bunuri Inner Alăturați-vă pe bunuri.Sovar \u003d tranzacție. Exemplul 6.8. Numărarea valorii totale a bunurilor vândute.

A SE GRUPA CU

Adesea, cererile sunt necesare pentru a forma rezultate intermediare, care sunt, de obicei, afișate de aspectul în cererea de frază "pentru fiecare ...". În acest scop, declarația selectată utilizează grupul cu aprovizionare. Cererea în care este prezentă grupul este numită o cerere de grupare, deoarece este grupată de datele obținute ca urmare a executării operației selectate, după care este creată singurul șir total pentru fiecare grup individual. Standardul SQL necesită ca selecția și grupul de clauză să fie strâns legați. Dacă există o expresie selectată în instrucțiunea SELECT, fiecare element al listei din clauza SELECT trebuie să fie singura valoare pentru întregul grup. Mai mult, propunerea selectată poate include numai următoarele tipuri de articole: nume de câmp, funcțiile finale, Constante și expresii, inclusiv combinații ale elementelor enumerate mai sus.

Toate numele câmpurilor prezentate în lista de propuneri selectați trebuie să fie prezente în grupul de fraze cu - cu excepția cazului în care se utilizează numele coloanei în rezumatul funcției. Regula inversă nu este corectă - grupul cu fraza poate fi numele coloanelor care lipsesc în lista de propuneri selectate.

În cazul în care propunerea în care propunerea este utilizată împreună cu grupul BT, este procesată mai întâi și numai acele linii care satisfac condiția de căutare sunt expuse grupului.

Standardul SQL determină că atunci când efectuează o grupare, toate valorile lipsă sunt considerate egale. Dacă cele două rânduri ale mesei din aceeași coloană de grup conțin valori nul și identice în toate celelalte coloane goale care nu sunt goale, ele sunt plasate în același grup.

Exemplul 6.9. Calculați volumul mediu al achizițiilor efectuate de fiecare cumpărător.

Selectați Client.Familia, AVG (Deal. Naționalitate) ca Mediu_Colism de la Client Inner Tranzacție Alăturați-vă pe client.codclient \u003d Tranzacție. CodClienate Grup de către client.familie Exemplul 6.9. Calculul volumului mediu de achiziții efectuate de fiecare cumpărător.

Expresia "fiecare cumpărător" a fost reflectată în cererea SQL sub forma unei propoziții Grup de către client.familia..

Exemplul 6.10. Pentru a determina cât de mult produsul a fost vândut fiecărui nume.

Selectați produsul. Notă, suma (produs. Preț * Tranzacție. Naționalitate) ca cost din bunuri Inner Alăturați-vă pe produs. Surse de alimentare \u003d Tranzacție. Grupul de energie electrică pe produs. Notă Exemplul 6.10. Definiția pe care produsul a fost vândut fiecărui nume.

Selectați Client.Firm, Count (tranzacție. Caz) ca număr de la Client Inner Alăturați tranzacția pe Client.codcliente \u003d Tranzacție. CodCrienate Grup de către client.Firm Exemplul 6.11. Numărarea numărului de tranzacții implementate de fiecare companie.

Selectați clientul. Firmă, suma (tranzacție. Naționalitate) ca General_Colomacy, Sum (produs. Preț * Tranzacție. Naționalitate) ca cost din partea mărfurilor interioare (Client Inner Alăturați tranzacția pe client. Codclienient \u003d tranzacție. Grupul de către client. Firma Exemplul 6.12. Numărarea numărului total de bunuri achiziționate pentru fiecare companie și costul acestuia.

Exemplul 6.13. Determinați costul total al fiecărui produs pentru fiecare lună.

Selectați produsul. Ca luna, suma (produs. Preț * Tranzacție. Naționalitate) ca cost din partea bunurilor Interioare Alăturați-vă pe marfă. Surse de alimentare \u003d tranzacție. Grup de produs. Notă, lună (Deal. Date) Exemplul 6.13. Determinarea valorii totale a fiecărui produs pentru fiecare lună.

Exemplul 6.14. Determinați costul total al fiecărui produs al clasei prime pentru fiecare lună.

Selectați produsul. Notă, lună (Deal. Date) ca lună, suma (produs. Preț * Tranzacție. Naționalitate) ca cost din partea mărfurilor Interioare Tranzacție pe produs. Surse de alimentare \u003d tranzacție.Tower unde produs.. Nice, luna (date) Exemplul 6.14. Determinarea valorii totale a fiecărui produs din clasa întâi pentru fiecare lună.

Oferta de a avea

Cu având, toate grupurile grupate anterior de blocuri de date care îndeplinesc condițiile specificate în condițiile care au condițiile sunt reflectate. Aceasta este o capacitate suplimentară de a "profil" setul de ieșire.

Condiții de diferă de condițiile de unde:

  • Având elimină din setul rezultat de date de grup cu rezultatele valorilor agregate;
  • Unde se elimină de la calcularea valorilor agregate pentru o grupare de înregistrare care nu satisfac starea;
  • În cazul în care condiția de căutare, nu puteți specifica funcțiile agregate.

Exemplul 6.15. Determină firmele care au numărul total de tranzacții au depășit trei.

Selectați clientul. Firmă, număr (tranzacție. Țară) ca număr_ders de la client interior Alăturați-vă pe Client.codklient \u003d tranzacție. Grupul de către client.Fripted având numărătoare (Deal. Nality)\u003e 3 Exemplul 6.15. Definiția firmelor în care numărul total de tranzacții a depășit trei.

Exemplul 6.16.Pentru a retrage o listă de bunuri vândute în valoare de peste 10.000 de ruble.

Selectați produsul. Notă, suma (produs. Preț * Tranzacție. Naționalitate) În calitate de cost din bunurile interioare Alăturați-vă pe mărfuri. Power sursa \u003d tranzacție. Grup de produs de produs (produs. Compania * Distrem Exemplul 6.16. Retragerea listei de bunuri vândute în valoare de peste 10.000 de ruble.

Exemplul 6.17. Afișați o listă de bunuri vândute în valoare de peste 10.000 fără a specifica suma.

Selectați produsul. Notă din partea bunurilor interioare Alăturați-vă pe produs.stovar \u003d Tranzacție. Grup de produs produs produs. Având suma (produs. Preț * Tranzacție. Naționalitate)\u003e 10000 Exemplul 6.17. Ieșirea listei de bunuri vândute în valoare de peste 10.000 fără a specifica suma.

Pentru a determina numărul de intrări din tabelul MySQL, trebuie să utilizați funcția de număr special ().

Funcția Count () returnează numărul de intrări din tabel corespunzător criteriului specificat.

Funcția Count (expr) ia întotdeauna în considerare numai acele șiruri în care expresia expresiei nu este nulă.

O excepție de la această regulă este de a utiliza funcția Count () cu un asterisc ca argument - numără (*). În acest caz, toate liniile sunt luate în considerare, indiferent dacă nul sunt sau nu nul.

De exemplu, funcția Count (*) returnează numărul total de intrări din tabel:

Selectați numărul (*) de la table_name

Cum se calculează numărul de înregistrări și afișare

Exemplu PHP + Codul MySQL pentru numărarea și ieșirea numărului total de rânduri:

$ res \u003d mysql_query ("selectați numărul (*) de la table_name") $ rând \u003d mysql_fetch_row ($ res); $ Total \u003d $ rând; // intrări totale ECHO Total $; ?\u003e.

Acest exemplu ilustrează cea mai ușoară opțiune de utilizare a funcției Count (). Dar, cu această caracteristică, alte sarcini pot fi lăsate.

Când specificați o coloană specifică a tabelului ca parametru, funcția de numărare (coloana_name) returnează numărul de înregistrări ale acestei coloane care nu conțin valoarea nulă. Înregistrările cu valori nul sunt ignorate.

Selectați Count (Column_name) de la table_name

Utilizați funcția MySQL_NUMS () nu poate fi utilizată, deoarece pentru a afla numărul total de intrări, trebuie să interogați selectați * de la db, adică pentru a obține toate înregistrările, și acest lucru este nedorit, deci este de preferat să Utilizați funcția de număr.

$ rezultat \u003d mysql_query ("selectați numărul (*) ca rec de la db");

Folosind funcția Count () pe exemplu

Iată un alt exemplu de utilizare a funcției Count (). Să presupunem că există o masă ICE_CREAM cu un catalog de înghețată, în care există identificatori de categorii și nume de înghețată.

Vom învăța să rezumăm. Nu, aceasta nu este rezultatele studiului SQL și a rezultatelor valorilor coloanelor tabelelor bazei de date. Funcțiile agregate SQL sunt valabile pentru valorile coloanei pentru a obține o singură valoare rezultată. Cele mai des utilizate funcții SQL SQL, min, max, avg și numărare. Două cazuri de aplicare a funcțiilor agregate ar trebui distinse. Primul: funcțiile agregate sunt folosite de ele însele și returnează o valoare rezultată. În al doilea rând: funcțiile agregate sunt utilizate cu grupul SQL de către operator, adică cu o grupare pe câmpuri (coloane) pentru a obține valorile rezultate în fiecare grup. Luați în considerare primele cazuri de utilizare a funcțiilor agregate fără grupare.

SQL Suma Funcție

Suma funcției SM returnează cantitatea de valori ale coloanei tabelului de bază de date. Acesta poate fi utilizat numai pentru coloanele ale căror valori sunt numere. SQL cereri de a obține suma rezultată începe:

Selectați suma (NEFF NAME) ...

După aceasta, expresia urmează (name_name) și apoi folosind designul în cazul în care poate fi specificat o condiție. În plus, în fața numelui coloanei, se poate specifica distinct, ceea ce înseamnă că vor fi luate în considerare numai valori unice. Implicit, toate valorile sunt luate în considerare (pentru aceasta puteți specifica în mod specific nu distinct, dar tot, dar cuvântul totul nu este obligatoriu).

Exemplul 1. Există o bază de date de date cu date privind diviziile și angajații săi. Masa de personal pe lângă tot ceea ce are o coloană cu date privind salariile angajaților. Proba din tabel are forma următoare (pentru a mări imaginea pentru a face clic pe acesta cu butonul stâng al mouse-ului):

Pentru a obține suma tuturor salariilor, folosim următoarea interogare:

Selectați suma (salariul) de la personal

Această solicitare va reveni la 287664,63.

Si acum . În exerciții, deja începem să complicăm sarcinile, aducându-le în jurul lor care se găsesc în practică.

SQL MIN Funcția

Funcția SQL MIN funcționează, de asemenea, în legătură cu coloanele ale căror valori sunt numere și returnează minimul între toate valorile coloanei. Această caracteristică are o sintaxă similară de sintaxă a funcției sumei.

Exemplul 3. Baza de date și tabelul sunt aceleași ca în exemplul 1.

Este necesar să înveți salariul minim al personalului departamentului cu numărul 42. Pentru a face acest lucru, scrieți următoarea interogare:

Cererea va returna valoarea de 10505.90.

Și din nou exercitarea pentru auto-decizie. În acest caz și alte exerciții, nu numai tabelul de personal va fi necesar, ci și tabelul ORG care conține date privind diviziile companiei:


Exemplul 4. Tabelul ORG este adăugat la tabelul de personal care conține date despre diviziile companiei. Îndepărtați numărul minim de ani elaborat de un angajat în departamentul situat în Boston.

SQL max caracteristică

În mod similar, funcționează și are o funcție de sintaxă similară SQL MAX, care este utilizată atunci când este necesară pentru a determina valoarea maximă între toate valorile coloanei.

Exemplul 5.

Este necesar să înveți salariul maxim al Departamentului Departamentului cu numărul 42. Pentru a face acest lucru, scrieți următoarea interogare:

Cererea va returna valoarea din 18352.80

Este timpul exerciții pentru auto-decizie.

Exemplul 6. Lucrăm din nou cu două mese - personal și org. Pentru a retrage numele departamentului și valoarea maximă a Comisiei primită de un angajat în departamentul aparținând diviziei (diviziei) estice. Utilizare Alăturați-vă (conexiunea la masă) .

Funcție sql avg.

Sintaxa specificată pentru funcțiile descrise anterioare este adevărată și pentru funcția SQL AVG. Această caracteristică returnează valoarea medie între toate valorile coloanei.

Exemplul 7. Baza de date și tabelul sunt aceleași ca în exemplele anterioare.

Să fie necesar să înveți experiența medie de muncă a personalului departamentului cu numărul 42. Pentru a face acest lucru, scrieți următoarea interogare:

Rezultatul va fi 6.33

Exemplul 8. Lucrăm cu un personal. Pentru a aduce salariul mediu al angajaților cu experiență de la 4 la 6 ani.

Funcția de numărare SQL.

Funcția de numărare SQL returnează numărul de intrări de tabel de bază de date. Dacă specificați numărul selectat în interogare ..., atunci rezultatul va fi numărul de înregistrări fără a lua în considerare acele înregistrări în care valoarea coloanei este nulă (nedefinită). Dacă utilizați ca argument ca argument și începeți o interogare de selectare (*) ..., atunci rezultatul va fi numărul tuturor înregistrărilor (rândurile) tabelului.

Exemplul 9. Baza de date și tabelul sunt aceleași ca în exemplele anterioare.

Este necesar să cunoașteți numărul tuturor angajaților care primesc comisioane. Numărul de angajați ale căror valori ale coloanei COM nu sunt NULL vor returna următoarea interogare:

Selectați numărul (Comm) de la personal

Rezultatul va fi valoarea 11.

Exemplul 10. Baza de date și tabelul sunt aceleași ca în exemplele anterioare.

Dacă doriți să cunoașteți numărul total de intrări din tabel, aplicați o solicitare cu stelele ca argument al funcției de numărare:

Selectați numărul (*) de la personal

Rezultatul va fi valoarea de 17.

În cele ce urmează exercitarea pentru auto-decizie Va fi necesar să utilizați o subquery.

Exemplul 11. Lucrăm cu un personal. Afișați numărul de angajați din departamentul de planificare (câmpiile).

Funcții agregate cu grupul SQL prin (grupare)

Acum, luați în considerare utilizarea funcțiilor agregate împreună cu grupul SQL de către operator. Declarația SQL Group BT servește la gruparea valorilor rezultate pe coloanele tabelului de bază de date. Pe site este lecția dedicată acestui operator .

Exemplul 12.Există o bază de date a anunțului PORTLE. Are un tabel de anunțuri care conțin date despre anunțurile depuse într-o săptămână. Coada Categorie conține date privind categoriile mari clasificate (de exemplu, imobiliare) și piese de coloană - despre piesele mai mici incluse în categorie (de exemplu, părți ale apartamentului și cabane sunt părți ale proprietății). Coloana Unităților conține date privind numărul de anunțuri depuse, iar coloana Money este despre numerarul, inversată pentru admiterea anunțurilor.

Categorie.ParteUnități.Bani.
TransportAutomat110 17600
ProprietateaApartamente89 18690
ProprietateaDacha.57 11970
TransportMotociclete131 20960
Materiale de construcțiiTablouri68 7140
Inginerie ElectricăTVS.127 8255
Inginerie ElectricăFrigidere137 8905
Materiale de construcțiiRevine.112 11760
AgrementCărți96 6240
ProprietateaAcasă47 9870
AgrementMuzică117 7605
AgrementJocuri41 2665

Utilizarea grupului SQL de către operator, găsiți sumele de bani inversate pentru aplicarea anunțurilor în fiecare categorie. Scriem următoarea interogare:

Selectați categoria, suma (bani) ca bani din grupul ADS după categorie

Exemplul 13. Baza de date și tabelul este același ca în exemplul anterior.

Folosind grupul SQL de către operator, aflați care parte din fiecare categorie cel mai mare număr de anunțuri. Scriem următoarea interogare:

Selectați categoria, parte, max (unități) ca Maxim ARM de la Grupul ADS după categorie

Rezultatul va fi următorul tabel:

Valorile totale și individuale într-un singur tabel pot fi obținute combinarea rezultatelor interogării utilizând operatorul Uniunii .

Baze de date relaționale și limbaj SQL

Calcule

Funcțiile finale

În expresii de solicitare SQL, este adesea necesară pentru a procesează datele. În acest scop, sunt utilizate funcții și expresii speciale.

Destul de des, trebuie să știți câte înregistrări corespund unei anumite solicitări,care este suma valorilor unei coloane numerice, valoarea maximă, minimă și medie. Acest lucru servește așa-numitele funcții finale (statistice, agregate). Funcțiile finale procesează seturile de înregistrări specificate, de exemplu, expresia unde. Dacă acestea sunt incluse în lista coloanelor care urmează instrucțiunii SELECT, tabelul de rezultate va conține nu numai coloanele tabelului bazei de date, ci și valorile calculate utilizând aceste funcții. Citeste mai multlista funcțiilor finale.

  • Număr (parametru. ) - Returnează numărul de înregistrări specificate în parametru. Dacă doriți să obțineți numărul tuturor înregistrărilor, atunci trebuie să specificați simbolul asterisc (*). Dacă specificați numele coloanei ca parametru, funcția va returna numărul de intrări în care această coloană are alte valori decât NULL. Pentru a afla câte valori diferite conțin o coloană, trebuie să specificați cuvântul cheie distinct înainte de acesta. De exemplu:

Selectați numărul (*) de la clienți;

Selectați Count (Vânzare CUARD) de la clienți;

Selectați Count (distinct Sum_Name) de la clienți;

Încercarea de a efectua următoarea interogare va face un mesaj de eroare:

Selectați regiunea, numărul (*) de la clienți;

  • Sumă (parametru. ) - Returnează cantitatea de valori ale coloanei specificate în parametru. Parametrul poate fi atât o expresie care conține numele coloanei. De exemplu:

Selectați suma. (Valoarea_name) de la clienți;

Această expresie SQL returnează o masă constând dintr-o singură coloană și o înregistrare și care conține suma tuturor anumitor valori ale valorii coloanei din tabelul clientului.

Să presupunem că în tabelul sursă, valoarea cantității coloanei este exprimată în ruble și trebuie să calculam suma totală în dolari. Dacă cursul de schimb curent este, de exemplu, 27,8, atunci este posibil să se obțină rezultatul dorit folosind o expresie:

Selectați suma. (Sum_name * 27,8) de la clienți;

  • AVG (parametru. ) - Returnează media aritmetică a tuturor valorilor specificate în parametrul coloanei. Parametrul poate fi o expresie care conține numele coloanei. De exemplu:

Selectați AVG (Sum_name) de la clienți;

Selectați AVG (Sum_Name * 27.8) de la clienți

Unde regiunea<> "North_3Apad";

  • Mach (parametru. ) - Returnează valoarea maximă din coloana specificată în parametru. Parametrul poate fi, de asemenea, o expresie care conține numele coloanei. De exemplu:

Selectați max (Sum__nce) de la clienți;

Selectați Mach (Sum_Name * 27,8) de la clienți

Unde. Regiune<> "North_3Apad";

  • Min (parametru. ) - Returnează valoarea minimă din coloana specificată în parametru. Parametrul poate fi o expresie care conține numele coloanei. De exemplu:

Selectați min (comandă de vânzare) de la clienți;

Selectați min (Sum__nce * 27. 8) de la clienți

Unde. Regiune<> "North_3Apad";

În practică, este adesea necesar să se obțină un tabel final care conține valorile totale, medii, maxime și minime ale coloanelor numerice. Pentru a face acest lucru, utilizați grupul de grup (grup de) și funcții finale.

Selectați regiunea, suma (SumaDER) de la clienți

Grup pe regiune;

Tabelul de rezultate pentru această solicitare conține numele regiunilor și valoarea totală (generală) a comenzilor tuturor clienților din regiunile respective (figura 5).

Acum, luați în considerare o cerere de primire a tuturor datelor finale pe regiune:

Selectați regiunea, suma (SUP Option), AVG (Sum_name), max (sum_name),Min (sum_name)

De la clienți

Grup pe regiune;

Tabelele sursă și rezultate sunt prezentate în fig. 8. În exemplu, numai Regiunea Nord-Vest este prezentată în tabelul sursă cu mai mult de o înregistrare. Prin urmare, în tabelul de rezultate pentru aceasta, diverse rezultate primesc valori diferite.

Smochin. 8. Valoarea masa finală a comenzilor pe regiuni

Când utilizați funcțiile finale din lista de coloane din instrucțiunea Select, anteturile corespunzătoare acestora în tabelul de rezultate au apariția expr1001, expr1002 etc. (sau ceva similar, în funcție de implementarea SQL). Cu toate acestea, titlurile pentru valorile funcțiilor finale și alte coloane pe care le puteți seta la discreția dvs. Pentru a face acest lucru, suficient după coloana din instrucțiunea SELECT, specificați expresia tipului:

Ca titlu_stolbets.

Cuvântul cheie (AS) înseamnă că în tabelul de rezultate, coloana corespunzătoare trebuie să aibă un titlu specificat după cum. Antetul numit este numit și un pseudonim. În exemplul următor (fig.9), pseudonimele sunt stabilite pentru toate coloanele calculate:

Selectați regiunea,

SUMĂ. (Sum_name) ca [suma totală a comenzii],

AVG. (Suma ordinului) ca [suma medie a ordinii],

Max (sum_name) ca maxim

Min. (Sum_name) ca minim,

De la clienți

Grup pe regiune;

Smochin. 9. Tabelul final al comenzilor pe regiuni care utilizează aliasul coloanei

Pseudonimele, constând din mai multe cuvinte separate de spații, sunt paranteze pătrate.

Funcțiile finale pot fi utilizate în selecția și având expresii, dar ele nu pot fi utilizate în cazul în care expresia. OneReter având este similar cu operatorul în care operatorul, dar, spre deosebire de locul în care selectează înregistrările în grupuri.

Să presupunem că este necesar să se determine în ce regiuni mai mult de un client. În acest scop, puteți utiliza această solicitare:

Selectați regiunea, numărul (*)

De la clienți

Grupul de regiune având numărul (*)\u003e 1;

Funcții pentru prelucrarea valorilor

Când lucrați cu date, ele trebuie adesea să le proceseze (convertiți la forma dorită): Selectați un substring în linie, îndepărtați golurile de conducere și finale, rotunjați numărul, calculați rădăcina pătrată, determinați ora curentă etc. După trei tipuri de funcții sunt disponibile în SQL:

  • funcțiile șirului;
  • funcții numerice;
  • funcțiile datează.

String Funcții

Funcțiile de șir sunt luate ca parametru șir și returnați după procesarea șirul sau null.

  • Substring. (Șir de la început) - Returnează un substring obținut din șirul care este specificat ca parametrulinie. Substring. Începe cu caracterul, numărul de secvență este specificat în parametrul Start și are lungimea specificată în parametrul de lungime. Numerotarea simbolurilor de șir este efectuată de la stânga la dreapta, începând cu 1. Parantezele pătrate aici indică doar faptul că expresia încheiată în ele nu este obligatorie. Dacă expresiaPentru lungime nu este folosit, atunci substringul este returnat de lastart și până la sfârșitul liniei sursă. Valorile parametriloracasă și lungime. Trebuie să fie selectată astfel încât substringul dorit să fie într-adevăr în interiorul liniei sursă. În caz contrar, funcția de substring va reveni null.

De exemplu:

Substring ("Dragă Masha!" De la 9 pentru 4) - returnează "Masha";

Substring ("Dragă Masha!" Din 9) -ards "Masha!";

Substring ("Dragă Masha!" Din 15) este nulă.

Puteți utiliza această caracteristică în expresia SQL, de exemplu, după cum urmează:

Selectați * de la clienți

Unde substring (regiune de la 1 pentru 5) \u003d "Nord";

  • Superior (șir. ) - transferă toate caracterele specificate în parametrul șirului cu majuscule.
  • Inferior ) - transferă toate caracterele specificate în parametrul șirului în registrul inferior.
  • Trim (lider | Trailing | Ambele ["simbol"] de la rând ) - Șterge liderul (lider), final (trailing) sau acelea și altele (ambele) dintr-un șir. În mod implicit, un simbol de la distanță este un spațiu (""), astfel încât nu poate fi indicat. Cel mai adesea, această caracteristică este utilizată cu precizie pentru a elimina spațiile.

De exemplu:

Trim (conducerea "" din "Orașul Sf. Petersburg") rotește "orașul Sankt Petersburg";

Trim (Trailing "" Din "City of St Petersburg" returnează orașul Sankt Petersburg;

Trim (ambele "" din "Orașul Sf. Petersburg") - returnează orașul Sankt Petersburg;

Trim (atât din "orașul Sf. Petersburg") - returnează orașul Sankt Petersburg;

Trim (atât "domnul" de la "Orașul Sf. Petersburg") - returnează "Sf. Petersburg OOD".

Printre aceste funcții sunt cele mai frecvent utilizate - substring () și Trim ().

Funcții numerice

Funcțiile numerice ca parametru pot primi date nu numai tip numeric, dar întotdeauna returnează numărul sau null (valoarea nedeterminată).

  • ( targetStrock în șir.) - caută intrarea liniei țintă la șirul specificat. În cazul unei căutări de succes, returnează numărul de poziție al primului său caracter, altfel - 0. Dacă linia țintă are o lungime zero (de exemplu, un șir "), atunci funcția returnează 1. Dacă cel puțin unul dintre parametri este nul, nul este returnat. Numerotarea simbolurilor de șir este efectuată de la stânga la dreapta, începând de la 1.

De exemplu:

Poziția ("E" în "Hello Toată lumea") - Returnează 5;

Poziția ("Toate" în "Hello Toată lumea") - returnează 8;

Poziția ("Bună ziua tuturor") - Returnează 1;

Poziția ("Bună!" În "Bună ziua toată lumea") - returnează 0.

În tabelul Clienți (vezi figura 1) coloana de adresă conține, cu excepția numelui orașului, codul poștal, numele străzii și altor date. Este posibil să aveți nevoie să alegeți înregistrările clienților care locuiesc într-un anumit oraș. Deci, dacă aveți nevoie să alegeți înregistrări legate de clienții care locuiesc în Sankt Petersburg, puteți utiliza următoarea expresie SQL Solicitare:

Selectați * de la clienți

Unde poziția ("Sf. Petersburg" în adresa)\u003e 0;

Rețineți că această solicitare simplă de selectare a datelor poate fi formulată altfel:

Selectați * de la clienți

Unde adresa "% petersburg%";

  • Extrage (parametru. ) - extrage un element de la tipul de dată sau de la interval. De exemplu:

Extras (luna de la data "2005-10-25") -returnează 10.

  • Caracter_length (șir. ) - Returnează numărul de caractere din șir.

De exemplu:

Caracter_Length ("salut toată lumea") - returnează 11.

  • Octet_length (șir. ) - Returnează numărul de octeți (octeți) în șir. Fiecare simbol al latinului sau chirilicului este un octet, iar simbolul alfabetului chinez este doi octeți.
  • Cardinalitate (parametru. ) - ia o colecție de elemente ca parametru și returnează numărul de elemente din colecție (număr cardinal). Colecția poate fi, de exemplu, cu o matrice sau cu multiset care conține elemente de diferite tipuri.
  • ABS (număr ) - Returnează valoarea absolută a numărului. De exemplu:

ABS (-123) este de 123;

ABS (2 - 5) - Returnează 3.

  • MO D (numărul1, numărul 2 ) - Returnează echilibrul diviziei întregi a primului număr la al doilea. De exemplu:

Mod (5, s) - returnează 2;

MOD (2, S) - returnează 0.

  • Ln (număr ) - Returnează logaritmul natural al numărului.
  • ExR (număr) - returnări (Baza logaritmului natural în măsura).
  • Putere (numărul1, numărul 2 ) - returnează numărul 1numarul 2 (numărul 1 la gradul Număr2).
  • Sqrt (număr ) - Returnează o rădăcină pătrată de la.
  • Etajul (numărul ) - Returnează cel mai mare număr întreg care nu depășește parametrul specificat (rotunjit la o direcție mai mică). De exemplu:

Podea (5.123) - returnează 5.0.

  • Ceil (număr) sau plafon (număr ) - Returnează cel mai mic număr întreg care nu este mai mic decât parametrul de rotunjire într-o direcție mare). De exemplu:

CEL (5.123) - returnează 6. 0.

  • Width_bucket. (numărul 1, numărul2, numerose, numărul4) returnează un număr întreg în intervalul 0 și numărul 4 + 1. Parametrii Număr2 și numerose Specificați un segment numeric, împărțit în intervale de echilibru, numărul căruia este setat de numărul 4. Funcția determină funcția numărul intervalului în care valoarea numărul 1. Dacă numărul 1 este în afara domeniului specificat, atunci funcția returnează 0 sau numărul 4 + 1. De exemplu:

Width_bucket (3.14, 0, 9, 5) - returnează 2.

Funcțiile datei

Limba SQL are trei funcții care returnează data și ora curente.

  • Data curenta. - Returnează data curentă (data tipului).

De exemplu: 2005-06-18.

  • Curent_time (număr ) - Returnează ora curentă (tip de timp). Un parametru întregi indică acuratețea prezentării secundelor. De exemplu, cu o valoare de 2 secunde va fi prezentată cu o precizie de sute (două cifre în partea fracțională):

12:39:45.27.

  • Current_Timestamp (număr. ) - Returnează data și ora (tipul de timp). De exemplu, 2005-06-18 12: 39: 45.27. Un parametru întregi indică acuratețea prezentării secundelor.

Rețineți că data și ora returnată de aceste funcții nu au tip de simbol. Dacă doriți să le trimiteți sub formă de caractere de caractere, atunci pentru aceasta ar trebui să utilizați funcția de conversie turnată ().

Funcțiile de timp date sunt de obicei aplicate în introducerea cererilor, actualizarea și ștergerea datelor. De exemplu, atunci când scrieți o informație de vânzări într-o specialitate specializată pentru aceasta, coloana este făcută de data și ora curentă. După însumarea pentru luna sau trimestrul, datele de vânzare pentru perioada de raportare pot fi șterse.

Expresii calculate

Expresiile calculate sunt construite din constante (numerice, șir, logice), funcții, nume de teren și date de alte tipuri prin conectarea operatorii aritmetici, șir, logici și alți. La rândul său, expresii pot fi combinate prin operatori în expresii mai complexe (compozite). Suporturile rotunde sunt utilizate pentru a gestiona procedura de calcul al expresii.

Operatori logici Și, sau nu și funcții Au fost revizuite mai devreme.

Operatori aritmetici:

  • + - adăugare;
  • - - scăderea;
  • * - multiplicare;
  • / - Divizia.

String operator. Numai unul este un operator de concatenare sau un șir de lipire (| |). În unele implementări SQL (de exemplu, Microsoft Access), în loc de (| |), este utilizat un simbol (+). Operatorul de conținut atribuie un al doilea șir până la sfârșitul primului exemplu, expresie:

"Sasha" | | "Iubeste" | | "Masha"

se va întoarce ca rezultat al șirului "Sashubit Masha".

La realizarea expresiilor, este necesar să se asigure că operatorii operanți au tipuri admise. De exemplu, expresia: 123 + "Sasha" este inacceptabilă deoarece operatorul de adiție aritmetică este aplicat operandului de șir.

Expresiile calculate pot fi după instrucțiunea SELECT, precum și în condițiile de funcționare a operatorilor HaviNg.

Luați în considerare mai multe exemple.

Lăsați tabelul de vânzări să conțină coloanele de tip de tip, cantitatea și prețul și trebuie să cunoaștem veniturile pentru fiecare tip de produs. Pentru aceasta, este suficient în lista de coloane după operatorul selectat Porniți cantitatea de expresie * Preț:

Selectați Type_Dashovar, Cantitate, Pret, Cantitate * PretLa fel de

Total de la vânzare;

Utilizează cuvântul cheie drept (AS) pentru a seta un pseudonim de coloană cu date calculate.

În fig. 10 prezintă tabelul sursă de vânzare și tabelul de rezultate al interogării.

Smochin. 10. Cerere rezultă cu calcularea veniturilor pentru fiecare tip de bunuri

Dacă doriți să cunoașteți veniturile generale din vânzarea tuturor bunurilor, este suficientă pentru a aplica următoarea interogare:

Selectați suma. (Cantitate * preț) de la vânzare;

Următoarea interogare conține expresii calculate și în lista coloanelor și în starea operatorului în care operatorul. Alege din tabelul de vânzare bunurile, venituri din vânzarea a căror mai mare de 1000:

Selectați Type_tovar, Cantitate * Preț ca totală

De la vânzare

Unde numărul * preț\u003e 1000;

Să presupunem că trebuie să obțineți o masă în care două coloane:

Bunuri care conțin tipul de bunuri și prețul;

Veniturile totale conținând veniturile.

Deoarece se presupune că în tabelul sursă al coloanei de vânzare Type_lovar este simbolic (caractere), iar coloana de preț este numerică, atunci când combinați (lipirea) datelor din aceste coloane, este necesar să se aducă un tip numeric simbolul folosind funcția turnată (). Cererea care efectuează această sarcină arată astfel (figura 11):

Selectați Type_stovar | | "(Pret:" | Cast (preț ca char (5)) | | ")" ca produs, cantitate * Preț ca total

De la vânzare;

Smochin. 11. Solicitați rezultatul cu o Uniune a datelor bazei de date într-o singură coloană

Notă. În Microsoft Access, o cerere similară va avea următorul formular:

Selectați Type_stovar + "(Preț:" + CStr. (Preț) + ")" ca produs,

Cantitate * Preț ca total

De la vânzare;

Expresii convenționale cu operator de caz

În limbile de programare obișnuită există operatori de tranziție condiționată care vă permit să controlați procesul de calcul în funcție de faptul că aveți sau nu o anumită condiție. În limba SQL, un astfel de operator este cazul (caz, circumstanță, copie). În SQL: 2003, acest operator returnează o valoare și, prin urmare, poate fi utilizat în expresii. Are două forme principale pe care le vom lua în considerare în această secțiune.

Operatorul de caz cu valori

Operatorul de caz cu valori are următoarea sintaxă:

Case checked_new

Când valoarea1, atunci rezultatul1

Când valoarea este 0, atunci resuletat2

. . .

Când meniul n, atunci rezultatul n

Altceva rezultate

În cazul în care verificat La fel de valoare1. , Operatorul de caz returnează valoarearezultatul1 , Specificat după cuvântul cheie, atunci. În caz contrar, verificarea verificabilă cusens2 și dacă sunt egale, atunci valoarea rezultatului2 este returnată. În caz contrar, valoarea verificată este comparată cu următoarea valoare indicată după cuvântul cheie (când), etc Dacă valoarea verificabilă nu este egală cu una dintre aceste valori, atunci valoarea este returnatărezultat X. indicat după cuvântul cheie (altfel).

Altceva cuvânt cheie nu este obligatoriu. Dacă lipsește și niciuna dintre valorile care sunt supuse comparațiilor, nu egale cu valoarea valoroasă, operatorul de caz returnează NULL.

Să presupunem că, pe baza tabelului client (vezi figura 1), este necesar să obțineți un tabel în care numele regiunilor sunt înlocuite cu numerele de cod. Dacă în tabelul sursă nu există prea multe regiuni diferite, atunci este convenabil să utilizați cererea cu operatorul de caz pentru a rezolva această sarcină:

Selectați numele, adresa,

Regiunea de caz

Când "Moscova", apoi "77"

Când "Regiunea Tver", apoi "69"

. . .

Altceva regiune

Ca cod de regiune

De la clienți;

Operatorul de caz cu termeni de căutare

A doua formă a operatorului de caz își asumă utilizarea atunci când se caută în tabelul acestor înregistrări care satisfac o anumită condiție:

Caz

Când condiția 1, atunci rezultatul1

Când Wai2, apoi rezultatul2

. . .

Când condiția n, atunci rezultatul n

Altceva rezultate

Operatorul de caz verifică dacă condiția1 este valabilă pentru prima intrare din setul definit de operatorul în cazul în care operatorul, sau în întregul tabel, dacă nu există unde. Dacă da, caz returnează valoarea rezultatului1. În caz contrar, o condiție2 este verificată pentru această înregistrare. Dacă este adevărat, valoarea rezultatului2 este returnată etc. Dacă niciuna dintre condițiile nu este executată, atunci valoarea este returnată.X. arătat după cheia cuvântului altceva.

Altceva cuvânt cheie nu este obligatoriu. Dacă lipsește și nu se efectuează nici una dintre condiții, operatorul de caz rotește nul. După ce carcasa care conține operatorul este executată pentru prima înregistrare, merge la următoarea înregistrare. Astfel continuu până când întregul set de înregistrări este procesat.

Să presupunem că, în tabelul de carte (numele, prețul), coloana este nulă dacă cartea corespunzătoare nu este disponibilă. Următoarea solicitare returnează un tabel în care textul "nu este disponibil" în loc de NULL:

Selectați Nume

Caz

Când prețul este nul, atunci "în afara stocului"

Alte Cuturi (preț ca char (8))

Ca preț

Din cărți;

Toate valorile aceleiași coloane trebuie să aibă aceleași tipuri. Prin urmare, această interogare utilizează funcția de conversie a tipului de turnare pentru a aduce numărul de valori ale coloanei. Prețul la tipul simbolic.

Rețineți că în loc de primul formular, operatorul de caz poate fi utilizat întotdeauna al doilea:

Caz

Când versement_venue \u003d valoarea1, apoi rezultatul1

Când este verificată.

. . .

Când versement_vense \u003d valoareN apoi pseltytn.

Altfel resolată

Nullif și funcții de coalesce

În unele cazuri, în special în cererile de actualizare a datelor (operator de actualizare), este convenabil să se utilizeze funcții mai compacte nullif () (, dacă) și coalesce () (, dacă) și coalesce ().

Funcția Nullif ( ceea ce înseamnă1, valoare2.) Returnează NULL Dacă valoarea primului parametru corespunde valorii celui de-al doilea parametru, în caz de inconsecvențe, valoarea primului parametru este returnată neschimbată. Aceasta este, dacă se efectuează valoarea egalității1 \u003d valoarea2, funcția returnează , altfel valoarea valorii1.

Această caracteristică este echivalentă cu operatorul de caz în următoarele două forme:

  • Valoarea cazului1.

Când recomandă2, atunci null

Altfel valoare1.

  • Caz

Când valoarea1 \u003d valoarea2, atunci nulă

Altfel valoare1.

Caracteristica coalesce ( valoare1, Value2, ...,n valoarea n) acceptă o listă de valori care pot fi specifice și incerte (null). Funcția returnează o valoare specifică din listă sau nulă dacă toate valorile nu sunt definite.

Această caracteristică este echivalentă cu următorul operator de caz:

Caz

Când valoarea 1 nu este nulă, atunci valoarea 1

Când valoarea 2 nu este nulă, atunci valoarea 2

. . .

Când n nu este nulă, atunci valoarea n

Altceva nul.

Să presupunem că în tabelul de carte (nume, preț), coloana de preț este nulă, dacă cartea corespunzătoare nu este disponibilă. Următoarea solicitare returnează o masă în care în schimbNUL Textul "nu este în stoc":

Selectați Nume, Coasce (Cast (preț ca char (8)),

"Nu este disponibil") ca preț

Din cărți;



Ți-a plăcut articolul? Împărtășește-l