Contacte

Numărați numărul de înregistrări în grupuri (create de GROUP BY). Calcule în sql Calculați numărul de id cu o anumită valoare

Descrie utilizarea operatorilor aritmetici și construcția coloanelor calculate. Sunt luate în considerare funcțiile rezumative (agregate) COUNT, SUM, AVG, MAX, MIN. Este dat un exemplu de utilizare a clauzei GROUP BY pentru gruparea în interogări de selecție a datelor. Descrie utilizarea clauzei HAVING.

Construirea câmpurilor calculate

În general, a crea câmp calculat (derivat). o anumită expresie ar trebui specificată în lista SELECT Limbajul SQL... Aceste expresii folosesc aritmetica de adunare, scădere, înmulțire și împărțire și funcții SQL încorporate. Puteți specifica numele oricărei coloane (câmp) a unui tabel sau interogare, dar utilizați numai numele coloanei acelui tabel sau interogare care este listat în clauza FROM a instrucțiunii corespunzătoare. Când construiți expresii complexe, pot fi necesare paranteze.

Standardele SQL vă permit să specificați în mod explicit numele de coloane ale tabelului rezultat utilizând clauza AS.

SELECTAȚI Nume.Produs, Preț.Produs, Cantitate.Ofertă, Preț.Produs * Cantitatea.Ofertă AS Cost FROM Product INNER JOIN Deal ON Cod.Produs = Deal.Codul Produs Exemplul 6.1. Calcularea costului total pentru fiecare tranzacție.

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

SELECTARE Companie, Prenume + "" + Stânga (Prenumele, 1) + "." + Stânga (Mijlocul nume, 1) + "." AS Numele complet FROM Client Exemplul 6.2. Obtinerea unei liste de firme cu indicarea prenumelui si parafa clientilor.

Interogarea folosește funcția încorporată Left, care vă permite să tăiați un caracter de la stânga într-o variabilă text în acest caz.

Exemplul 6.3. Obțineți o listă de produse cu anul și luna vânzării.

SELECTează Item.Name, Year (Deal.Date) AS An, Month (Deal.Date) AS Month FROM Item INNER JOIN Deal ON Item.Product Code = Deal.Product Code Exemplul 6.3. Primirea unei liste de produse indicând anul și luna vânzării.

Interogarea folosește funcțiile încorporate An și Lună pentru a extrage anul și luna dintr-o dată.

Utilizarea funcțiilor de rezumat

Prin utilizarea funcții rezumative (agregate).în cadrul unei interogări SQL, puteți obține o serie de statistici rezumative despre setul de valori selectate ale setului de ieșire.

Următoarele principale sunt disponibile utilizatorului. funcții de rezumat:

  • Count (Expression) - determină numărul de înregistrări din setul de ieșire al interogării SQL;
  • Min / Max (Expresie) - determinați cea mai mică și cea mai mare dintre setul de valori dintr-un anumit câmp al cererii;
  • Avg (Expresie) - Această funcție vă permite să calculați media unui set de valori stocate într-un anumit câmp de înregistrări selectate prin interogare. Este media aritmetică, adică suma valorilor împărțită la numărul lor.
  • Suma (Expresie) - calculează suma setului de valori conținute într-un anumit câmp al înregistrărilor selectate de interogare.

Numele coloanelor sunt cel mai adesea folosite ca expresii. Expresia poate fi calculată și folosind valorile mai multor tabele.

Toate aceste funcții operează pe valori dintr-o singură coloană a unui tabel sau cu o expresie aritmetică și returnează o singură valoare. Funcțiile COUNT, MIN și MAX se aplică atât câmpurilor numerice, cât și nenumerice, în timp ce funcțiile SUM și AVG pot fi utilizate numai în cazul câmpurilor numerice, cu excepția COUNT (*). La calcularea rezultatelor oricăror funcții, toate valorile goale sunt mai întâi excluse, după care operațiunea necesară este aplicată numai valorilor de coloană specifice rămase. Varianta COUNT (*) este un caz special de utilizare a funcției COUNT, scopul ei este de a număra toate rândurile din tabelul rezultat, indiferent dacă conține valori goale, duplicate sau orice alte valori.

Dacă trebuie să eliminați valorile duplicate înainte de a utiliza funcția generică, trebuie să precedați numele coloanei în definiția funcției cu cuvânt cheie DISTINCT. Nu are sens pentru funcțiile MIN și MAX, cu toate acestea, utilizarea acestuia poate afecta rezultatele execuției. Funcții SUMși AVG, așa că trebuie să luați în considerare în prealabil dacă ar trebui să fie prezent în fiecare caz. În plus, cuvântul cheie DISTINCT poate fi specificat cel mult o dată în orice interogare.

Este foarte important să rețineți că funcții de rezumat poate fi folosit doar în listă clauze SELECTși ca parte a clauzei HAVING. În toate celelalte cazuri, acest lucru este inacceptabil. Dacă lista din clauza SELECT conține funcții de rezumat, iar textul de interogare nu conține clauza GROUP BY, care asigură combinarea datelor în grupuri, atunci niciunul dintre elementele listei de clauze SELECT nu poate include nicio referință la câmpuri, cu excepția situației în care câmpurile acționează ca argumente funcții de rezumat.

Exemplul 6.4. Determinați primul nume alfabetic al produsului.

SELECT Min (Nume articol) AS Min_Name FROM Element Exemplul 6.4. Determinarea primului nume de produs alfabetic.

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

SELECT Count (*) AS Numărul_ de tranzacții FROM Trade Exemplul 6.5. Determinați numărul de tranzacții.

Exemplul 6.6. Determinați cantitatea totală de mărfuri vândute.

SELECTAȚI Suma (Deal.Quantity) AS Item_Quantity FROM Deal Exemplul 6.6. Determinarea cantității totale de mărfuri vândute.

Exemplul 6.7. Determinați prețul mediu al bunurilor vândute.

SELECTAȚI Avg (Item.Price) AS Avg_Price FROM Item INNER JOIN Deal ON Item.Product Code = Deal.Product Code; Exemplul 6.7. Determinarea prețului mediu al mărfurilor vândute.

SELECTAȚI Sumă (Art.Preț * Deal.Quantity) AS Cost FROM Item INNER JOIN Deal ON Item.Product Code = Deal.Product Code Exemplul 6.8. Calcularea costului total al mărfurilor vândute.

Clauza GROUP BY

Interogările necesită adesea subtotaluri, ceea ce este de obicei indicat de apariția expresiei „pentru fiecare...” în interogare. Clauza GROUP BY este folosită în acest scop în instrucțiunea SELECT. O interogare care conține un GROUP BY se numește interogare de grupare deoarece grupează datele rezultate dintr-o operație SELECT și apoi creează un singur rând rezumativ pentru fiecare grup individual. Standardul SQL cere ca clauza SELECT și clauza GROUP BY să fie strâns legate. Cu o clauză GROUP BY într-o instrucțiune SELECT, fiecare element din listă din clauza SELECT trebuie să aibă o singură valoare pentru întregul grup. În plus, clauza SELECT poate include doar următoarele tipuri de elemente: nume de câmpuri, funcții de rezumat, constante și expresii care includ combinații ale celor de mai sus.

Toate numele câmpurilor enumerate în clauza SELECT trebuie să apară în clauza GROUP BY, cu excepția cazului în care numele coloanei este utilizat în functie finala... Reversul nu este adevărat - clauza GROUP BY poate conține nume de coloane care nu sunt listate în clauza SELECT.

Dacă o clauză WHERE este utilizată cu GROUP BY, atunci aceasta este procesată mai întâi și sunt grupate numai acele rânduri care îndeplinesc condiția de căutare.

Standardul SQL specifică că atunci când se realizează gruparea, toate valorile lipsă sunt tratate ca fiind egale. Dacă două rânduri de tabel din aceeași coloană de grupare conțin valori NULL și identice în toate celelalte coloane grupate nevide, acestea sunt plasate în același grup.

Exemplul 6.9. Calculați volumul mediu de achiziții efectuate de fiecare client.

SELECT Client.Nume, Medie (Deal.Quantity) AS Average_amount FROM Client INNER JOIN Deal ON Client.Client Code = Deal.Client Code GROUP BY Client.Nume Exemplul 6.9. Calcularea volumului mediu de achiziții efectuate de fiecare client.

Expresia „de către fiecare client” este reflectată în interogarea SQL ca o propoziție GRUP DUPA Client.Nume.

Exemplul 6.10. Stabiliți pentru cât a fost vândut fiecare articol.

SELECTAȚI Nume.Articol, Sumă (Preț.Articol * Cantitate.Ofertă) AS Cost FROM Item INNER JOIN Deal ON Cod articol.Produs = Cod.Produs.Cod GROUP BY Nume articol. Exemplul 6.10. Determinarea pentru cât a fost vândut produsul fiecărui articol.

SELECT Client.Firm, Count (Deal.Trade Code) AS Numărul_ de tranzacții FROM Client INNER JOIN Deal ON Client.Client Code = Deal.Client Code GROUP BY Client.Firm Exemplul 6.11. Numărarea numărului de tranzacții efectuate de fiecare firmă.

SELECT Client.Firm, Sum (Deal.Quantity) AS Total_Quantity, Sum (Product.Price * Deal.Quantity) AS Cost FROM Product INNER JOIN (Client INNER JOIN Deal ON Client.Client Code = Deal.Client Code) ON Product.Product Cod = Deal .Cod produs GROUP BY Client.Firma Exemplul 6.12. Calculul cantității totale de bunuri achiziționate pentru fiecare companie și valoarea acesteia.

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

SELECTAȚI Nume Articol, Lună (Data Tranzacție) AS Lună, Sumă (Preț Articol * Cantitate Ofertă) AS Cost FROM Articol INNER JOIN Ofertă ON Cod articol.Produs = Cod Ofertă.Produs GROUP BY Nume articol, Lună (Ofertă) .Data ) Exemplul 6.13. Determinarea costului total al fiecărui produs pentru fiecare lună.

Exemplul 6.14. Determinați costul total al fiecărui produs din clasa întâi pentru fiecare lună.

SELECT. Nume articol, lună (Data tranzacție) AS Lună, Sumă (Preț articol * Cantitate tranzacție) AS Cost FROM articol INNER JOIN Ofertă ON Cod articol.Produs = Ofertă.Cod produs WHERE Item.Variety = „Primul” GROUP DUPĂ .Nume articol, lună (data.promoție) Exemplul 6.14. Determinarea costului total al fiecărui produs din clasa întâi pentru fiecare lună.

clauza HAVING

HAVING reflectă toate blocurile de date grupate anterior prin GROUP BY care îndeplinesc condițiile specificate în HAVING. aceasta oportunitate suplimentară„filtrați” setul de ieșire.

Condițiile din HAVING sunt diferite de condițiile din WHERE:

  • HAVING exclude grupurile de valori agregate din setul de date rezultat;
  • UNDE exclude din calculul valorilor agregate prin gruparea înregistrărilor care nu îndeplinesc condiția;
  • funcțiile agregate nu pot fi specificate în clauza de căutare WHERE.

Exemplul 6.15. Identificați firmele cu mai mult de trei tranzacții în total.

SELECT Client.Firm, Count (Deal.Number) AS Număr_ de_ tranzacții FROM Client INNER JOIN Deal ON Client.Client Code = Deal.Client Code GROUP BY Client.Firm HAVING Count (Deal.Number)> 3 Exemplul 6.15. Identificarea firmelor cu mai mult de trei tranzacții în total.

Exemplul 6.16. Afișați o listă de produse vândute cu peste 10.000 RUB.

SELECT. Nume.Produs, Sumă (Preț.Produs * Cantitate.Ofertă) AS Cost FROM Product INNER JOIN Deal ON Cod.Produs = Cod.Produs.Cod GROUP BY Nume.Produs HAVING Suma (Preț.Produs * Cantitate.Ofertă)> 10000 Exemplul 6.16. Afișarea unei liste de produse vândute cu peste 10.000 de ruble.

Exemplul 6.17. Afișați o listă de produse vândute cu mai mult de 10.000 fără a specifica suma.

SELECTARE Item.Name FROM Item INNER JOIN Deal ON Item.Product Code = Deal.Product Code GROUP BY Item.Name HAVING Sum (Articol.Preț * Deal.Quantity)> 10000 Exemplul 6.17. Afișarea unei liste de produse vândute cu peste 10.000 fără a specifica suma.

Începând cu versiunea 4.0, SGBD-ul MySQL are o capacitate destul de convenabilă de a număra numărul tuturor înregistrărilor potrivite pentru o interogare, atunci când numărul de înregistrări este limitat cu LIMIT. Când lucrați cu o căutare în bază de date, precum și când faceți selecții din tabele cu o cantitate mareînregistrări, o astfel de funcționalitate este pur și simplu necesară.

Sintaxă. În interogarea SELECT, opțiunea SQL_CALC_FOUND_ROWS trebuie specificată înaintea listei de coloane. Iată începutul sintaxei pentru clauza SELECT.

SELECTAȚI




select_expr, ......

Astfel, făcând interogare SELECT SQL_CALC_FOUND_ROWS DBMS va număra numărul total de rânduri care se potrivesc cu condiția de interogare și va stoca acest număr în memorie. Desigur, interogarea SELECT SQL_CALC_FOUND_ROWS are sens numai atunci când este utilizată constrângerea (LIMIT). Imediat după executarea unei interogări select pentru a obține numărul de înregistrări, trebuie să executați o altă interogare SELECT: SELECT FOUND_ROWS () ;. Ca rezultat, MySQL va returna un rând cu un câmp, care va stoca numărul de rânduri.

Un exemplu de cereri în sine:

> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name WHERE număr> 100 LIMIT 10;
> SELECTAȚI FOUND_ROWS ();

Prima interogare va returna (tipărește) 10 rânduri din tabelul tbl_name pentru care numărul condiției> 100 este adevărat. Al doilea apel la comanda SELECT va returna numărul de rânduri pe care prima comandă SELECT le-ar fi returnat dacă ar fi fost scrisă. fără o clauză LIMIT. Deși utilizarea comenzii SELECT SQL_CALC_FOUND_ROWS necesită ca MySQL să recalculeze toate rândurile din setul de rezultate, această metodă este totuși mai rapidă decât fără LIMIT, deoarece nu trebuie să trimită rezultatul către client.

Exemple de cereri de la PHP:

$ rezultat = mysql_query ("SELECT SQL_CALC_FOUND_ROWS * FROM table1 LIMIT 0, 10", $ link);
while ($ rând = mysql_fetch_assoc ($ rezultat))
{
var_dump ($ rând);
}

$ rezultat = mysql_query ("SELECT FOUND_ROWS ()", $ link);
$ num_rows = mysql_result ($ rezultat, 0);
echo „$ num_rows Rânduri \ n”;

Ca rezultat al executării codului, cu condiția ca linkul $ să indice o conexiune deschisă la SGBD, PHP va scoate 10 rânduri din tabelul 1 și apoi o valoare întreagă pentru numărul de rânduri care se potrivesc cu interogarea (excluzând LIMIT).

În interogările cu UNION, SQL_CALC_FOUND_ROWS se poate comporta în două moduri datorită faptului că LIMIT poate apărea în mai multe locuri. Numărarea rândurilor se poate face pentru interogări SELECT individuale sau pentru întreaga interogare după concatenare.

Scopul SQL_CALC_FOUND_ROWS pentru UNION este ca acesta să returneze numărul de rânduri care vor fi returnate fără o LIMITĂ globală. Condițiile pentru utilizarea SQL_CALC_FOUND_ROWS cu UNION sunt următoarele:

  • Cuvântul cheie SQL_CALC_FOUND_ROWS trebuie să apară în prima instrucțiune SELECT.
  • FOUND_ROWS () va fi exact numai dacă se folosește UNION ALL. Dacă UNION este specificat fără ALL, are loc deduplicarea și FOUND_ROWS () este doar aproximativă.
  • Dacă LIMIT nu este prezent în UNION, atunci SQL_CALC_FOUND_ROWS este ignorat și este returnat numărul de rânduri din tabelul temporar care este creat pentru a executa UNION.

Pentru a determina numărul de înregistrări în Tabelul MySQL, trebuie să utilizați functie speciala NUMARA ().

Funcția COUNT () returnează numărul de înregistrări dintr-un tabel care corespund unui anumit criteriu.

Funcția COUNT (expr) contorizează întotdeauna numai acele rânduri în care expr evaluează ca NOT NULL.

O excepție de la această regulă este utilizarea funcției COUNT () cu un asterisc ca argument - COUNT (*). În acest caz, toate rândurile sunt luate în considerare, indiferent dacă sunt NULL sau NOT NULL.

De exemplu, funcția COUNT (*) returnează numărul total de înregistrări dintr-un tabel:

SELECTAȚI COUNT (*) FROM table_name

Cum să numărați numărul de intrări și să afișați

Un exemplu de cod PHP + MySQL pentru numărarea și afișarea numărului total de rânduri:

$ res = mysql_query ("SELECT COUNT (*) FROM table_name") $ row = mysql_fetch_row ($ res); $ total = $ rând; // total records echo $ total; ?>

Acest exemplu ilustrează cea mai simplă utilizare a funcției COUNT (). Dar cu această funcție, puteți efectua și alte sarcini.

Prin indicarea coloană specifică tabel ca parametru, funcția COUNT (nume_coloană) returnează numărul de înregistrări din această coloană care nu conține NULL. Intrările NULL sunt ignorate.

SELECTAȚI COUNT (nume_coloană) FROM nume_tabel

Nu puteți utiliza funcția mysql_num_rows (), deoarece pentru a afla numărul total de înregistrări, trebuie să executați interogarea SELECT * FROM db, adică să obțineți toate înregistrările, ceea ce este nedorit, prin urmare, este de preferat să utilizați funcția de numărare.

$ rezultat = mysql_query ("SELECT COUNT (*) ca rec FROM db");

Folosind funcția COUNT () prin exemplu

Iată un alt exemplu de utilizare a funcției COUNT (). Să presupunem că aveți un tabel de înghețată cu un catalog de înghețată care conține ID-uri de categorii și nume de înghețată.

Lecția SQL 8. Gruparea înregistrărilor și funcția COUNT ().

Să ne amintim ce mesaje și în ce subiecte avem. Pentru a face acest lucru, puteți utiliza interogarea obișnuită:

Dar dacă trebuie doar să aflăm câte mesaje sunt pe forum. Pentru a face acest lucru, puteți utiliza funcția încorporată NUMARA ()... Această funcție numără numărul de rânduri. În plus, dacă * acționează ca argument pentru această funcție, atunci toate rândurile tabelului sunt numărate. Și dacă un nume de coloană este specificat ca argument, atunci sunt numărate numai acele rânduri care au o valoare în coloana specificată.

În exemplul nostru, ambele argumente vor da același rezultat, deoarece toate coloanele din tabel NU sunt NULL. Să scriem o interogare folosind coloana id_topic ca argument:

SELECTAȚI COUNT (id_topic) DIN postări;

Deci, există 4 postări în firele noastre. Dar dacă vrem să știm câte postări are fiecare subiect. Pentru a face acest lucru, trebuie să ne grupăm mesajele după subiect și să calculăm numărul de mesaje pentru fiecare grup. Pentru gruparea în SQL, utilizați operatorul A SE GRUPA CU... Solicitarea noastră va arăta acum astfel:

SELECTează id_topic, COUNT (id_topic) FROM postări GROUP BY id_topic;

Operator A SE GRUPA CU spune SGBD să grupeze datele după coloana id_topic (adică fiecare subiect este un grup separat) și pentru fiecare grup să numere numărul de rânduri:

Ei bine, în topicul cu id = 1 avem 3 mesaje, iar cu id = 4 - unul. Apropo, dacă nu ar exista valori în câmpul id_topic, atunci astfel de rânduri ar fi combinate într-un grup separat cu o valoare NULL.

Să presupunem că suntem interesați doar de grupuri cu mai mult de două mesaje. Într-o interogare normală, am specifica o condiție folosind operatorul UNDE, dar acest operator poate lucra numai cu șiruri, iar pentru grupuri aceleași funcții sunt îndeplinite de operator AVÂND:

SELECTează id_topic, COUNT (id_topic) FROM postări GROUP BY id_topic HAVING COUNT (id_topic)> 2;

Ca urmare, avem:

În lecția 4, am luat în considerare ce condiții pot fi stabilite de către operator UNDE, aceleasi conditii pot fi stabilite de catre operator AVÂND, trebuie doar să-ți amintești asta UNDE filtrează liniile și AVÂND- grupuri.

Așa că astăzi am învățat cum să creăm grupuri și cum să numărăm numărul de rânduri dintr-un tabel și în grupuri. În general, împreună cu operatorul A SE GRUPA CU puteți folosi și alte funcții încorporate, dar le vom studia mai târziu.

Vom învăța să rezumam. Nu, acestea nu sunt încă rezultatele studiului SQL, ci rezultatele valorilor coloanelor din tabelele bazei de date. Agregat Funcții SQL acționează asupra valorilor coloanei pentru a obține o singură valoare rezultată. Cele mai frecvent utilizate funcții de agregare SQL sunt SUM, MIN, MAX, AVG și COUNT. Este necesar să se facă distincția între două cazuri de utilizare a funcțiilor agregate. În primul rând, funcțiile de agregare sunt folosite singure și returnează o singură valoare rezultată. În al doilea rând, funcțiile de agregare sunt utilizate cu clauza SQL GROUP BY, adică cu gruparea după câmpuri (coloane) pentru a obține valorile rezultate din fiecare grup. Să luăm în considerare mai întâi cazurile de utilizare a funcțiilor agregate fără grupare.

Funcția SQL SUM

Funcția SQL SUM returnează suma valorilor unei coloane dintr-un tabel al bazei de date. Poate fi aplicat numai coloanelor ale căror valori sunt numere. interogări SQL pentru a obține suma rezultată, începeți astfel:

SELECTAȚI SUMA (COLUMN_NAME)...

Această expresie este urmată de FROM (TABLE_NAME) și apoi poate fi specificată o condiție folosind clauza WHERE. În plus, DISTINCT poate fi specificat în fața numelui coloanei, ceea ce înseamnă că vor fi numărate doar valorile unice. În mod implicit, toate valorile sunt luate în considerare (pentru aceasta, puteți specifica în mod specific nu DISTINCT, ci TOATE, dar cuvântul TOATE este opțional).

Exemplul 1. Există o bază de date a companiei cu date despre diviziile și angajații acesteia. Tabelul Staff, pe lângă toate, are o coloană cu date despre salariile angajaților. Selecția din tabel este următoarea (pentru a mări imaginea, faceți clic pe ea cu butonul stâng al mouse-ului):

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

SELECTAȚI SUMA (Salariu) FROM Personal

Această interogare va returna 287664.63.

Si acum . În exerciții, începem deja să complicăm sarcinile, aducându-le mai aproape de cele întâlnite în practică.

Funcția SQL MIN

Funcția SQL MIN funcționează și pe coloanele ale căror valori sunt numere și returnează minimul tuturor valorilor din coloană. Această funcție are aceeași sintaxă ca și funcția SUM.

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

Vrei să știi minim salariile angajații departamentului numărul 42. Pentru aceasta, scrieți următoarea cerere:

Solicitarea va returna valoarea 10505.90.

Și din nou exercițiu pentru decizie independentă ... În acest exercițiu și în alte câteva exerciții, veți avea nevoie nu numai de tabelul Staff, ci și de tabelul Org, care conține date despre diviziile companiei:


Exemplul 4. Tabelul Org este adăugat la tabelul Staff, care conține date despre diviziile companiei. Afișați numărul minim de ani în care un singur angajat a lucrat într-un departament situat în Boston.

Funcția SQL MAX

Funcția SQL MAX funcționează în mod similar și are o sintaxă similară, care este utilizată atunci când trebuie să determinați valoarea maximă dintre toate valorile dintr-o coloană.

Exemplul 5.

Este necesar să aflați salariul maxim al angajaților departamentului numărul 42. Pentru a face acest lucru, scrieți următoarea solicitare:

Solicitarea va returna valoarea 18352.80

A sosit timpul exerciții de auto-rezolvare.

Exemplul 6. Lucrăm din nou cu două mese - Staff și Org. Tipăriți numele departamentului și comisioanele maxime câștigate de un angajat dintr-un departament aparținând Diviziei de Est. Utilizare JOIN (aderă la mese) .

Funcția SQL AVG

Sintaxa de mai sus pentru funcțiile descrise anterior este valabilă și pentru funcția SQL AVG. Această funcție returnează media tuturor valorilor dintr-o coloană.

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

Să presupunem că doriți să aflați experiența medie de muncă a angajaților departamentului numărul 42. Pentru a face acest lucru, scrieți următoarea interogare:

Rezultatul va fi o valoare de 6,33

Exemplul 8. Lucrăm cu o singură masă - Personal. Retragerea salariului mediu al angajaților cu o experiență de 4 până la 6 ani.

Funcția SQL COUNT

Funcția SQL COUNT returnează numărul de înregistrări dintr-un tabel de bază de date. Dacă specificați SELECT COUNT (COLUMN_NAME) ... în interogare, rezultatul va fi numărul de înregistrări excluzând acele înregistrări în care valoarea coloanei este NULL (nedefinită). Dacă utilizați un asterisc ca argument și începeți o interogare SELECT COUNT (*) ..., rezultatul va fi numărul tuturor înregistrărilor (rândurilor) din tabel.

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

Este necesar să se afle numărul tuturor angajaților care primesc comisioane. Numărul de angajați ale căror valori ale coloanei Comm nu sunt NULL va returna următoarea interogare:

SELECTARE NUMĂR (Comm) FROM Staff

Rezultatul este 11.

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

Dacă trebuie să aflați numărul total de înregistrări dintr-un tabel, atunci folosim o interogare cu un asterisc ca argument pentru funcția COUNT:

SELECTAȚI NUMĂRUL (*) DIN Personal

Rezultatul este 17.

În urmatoarele exercițiu de autoajutorare va trebui să utilizați o subinterogare.

Exemplul 11. Lucrăm cu o singură masă - Personal. Afișați numărul de angajați din departamentul de planificare (Plains).

Funcții agregate cu SQL GROUP BY (grupare)

Acum să ne uităm la utilizarea funcțiilor agregate în combinație cu clauza SQL GROUP BY. Clauza SQL GROUP BY este utilizată pentru a grupa valorile rezultatului după coloanele tabelului bazei de date. Site-ul are o lecție dedicată acestui operator separat .

Exemplul 12. Există o bază de date a portalului de anunțuri. Conține tabelul Anunțuri, care conține date despre anunțurile trimise pentru săptămână. Coloana Categorie conține date despre categorii mari de anunțuri (de exemplu, Imobiliare), iar coloana Piese conține date despre părțile mai mici incluse în categorie (de exemplu, părțile Apartamente și Vile fac parte din categoria Imobiliare). Coloana Unități conține date despre numărul de anunțuri trimise, iar coloana Bani conține suma de bani primită pentru trimiterea anunțurilor.

CategorieParteUnitățiBani
TransportVehicule cu motor110 17600
ImobiliareApartamente89 18690
Imobiliarecabane57 11970
TransportMotociclete131 20960
Materiale de construcțiiScânduri68 7140
Inginerie Electricătelevizoare127 8255
Inginerie ElectricăFrigidere137 8905
Materiale de construcțiiRegips112 11760
Timp liberCărți96 6240
ImobiliareCase47 9870
Timp liberMuzică117 7605
Timp liberJocuri41 2665

Folosind Declarație SQL GROUP BY, găsiți suma de bani câștigată din trimiterea anunțurilor din fiecare categorie. Scriem următoarea cerere:

SELECTARE Categoria, SUMA (Bani) CA Bani FROM Anunțuri GROUP BY Categorie

Exemplul 13. Baza de date și tabelul sunt aceleași ca în exemplul anterior.

Utilizați instrucțiunea SQL GROUP BY pentru a afla care parte din fiecare categorie a avut cele mai multe anunțuri. Scriem următoarea cerere:

SELECT Category, Part, MAX (Unități) AS Maximum FROM Ads GROUP BY Category

Rezultatul va fi următorul tabel:

Pot fi obținute valori totale și individuale într-un singur tabel combinând rezultatele interogării folosind operatorul UNION .

Baze de date relaționale date și limbaj SQL



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