Funcții agregate în MySQL
Funcțiile agregate sunt totul despre
- Efectuarea calculelor pe mai multe rânduri
- Dintr-o singură coloană a unui tabel
- Și returnând o singură valoare.
Standardul ISO definește cinci (5) funcții agregate și anume;
1) COUNT
2) SUMA
3) AVG
4) MIN
5) MAX
De ce să folosiți funcții agregate
Din perspectiva afacerii, diferitele niveluri de organizare au cerințe diferite de informații. Managerii de nivel superior sunt de obicei interesați să cunoască cifre întregi și nu este necesar detaliile individuale.
Funcțiile agregate ne permit să producem cu ușurință date rezumate din baza noastră de date.
De exemplu, din baza noastră de date myflix, managementul poate necesita următoarele rapoarte
- Filmele cel mai puțin închiriate.
- Cele mai multe filme închiriate.
- Numărul mediu pe care fiecare film este închiriat într-o lună.
Producem cu ușurință rapoartele de mai sus folosind funcții agregate.
Să analizăm în detaliu funcțiile agregate.
Funcția COUNT
Funcția COUNT returnează numărul total de valori din câmpul specificat. Funcționează atât pe tipuri de date numerice, cât și pe cele nenumerice. Toate funcțiile agregate exclud în mod implicit valorile nule înainte de a lucra asupra datelor.
COUNT (*) este o implementare specială a funcției COUNT care returnează numărul tuturor rândurilor dintr-un tabel specificat. COUNT (*) ia în considerare și nuluri și duplicate.
Tabelul de mai jos arată datele din tabelul de închiriere de filme
numar de referinta | Data tranzacției | data_return | numar de membru | movie_id | film_ a revenit |
---|---|---|---|---|---|
11 | 20-06-2012 | NULL | 1 | 1 | 0 |
12 | 22-06-2012 | 25-06-2012 | 1 | 2 | 0 |
13 | 22-06-2012 | 25-06-2012 | 3 | 2 | 0 |
14 | 21-06-2012 | 24-06-2012 | 2 | 2 | 0 |
15 | 23-06-2012 | NULL | 3 | 3 | 0 |
Să presupunem că vrem să obținem de câte ori filmul cu id 2 a fost închiriat
SELECT COUNT(`movie_id`) FROM `movierentals` WHERE `movie_id` = 2;
Executarea interogării de mai sus în MySQL banc de lucru împotriva myflixdb ne oferă următoarele rezultate.
COUNT('movie_id') |
---|
3 |
Cuvânt cheie DISTINCT
Cuvântul cheie DISTINCT care ne permite să omitem duplicatele din rezultatele noastre. Acest lucru se realizează prin gruparea valorilor similare împreună.
Pentru a aprecia conceptul de Distinct, să executăm o interogare simplă
SELECT `movie_id` FROM `movierentals`;
movie_id |
---|
1 |
2 |
2 |
2 |
3 |
Acum să executăm aceeași interogare cu cuvântul cheie distinct -
SELECT DISTINCT `movie_id` FROM `movierentals`;
După cum se arată mai jos, distinct omite înregistrările duplicate din rezultate.
movie_id |
---|
1 |
2 |
3 |
Funcția MIN
Funcția MIN returnează cea mai mică valoare din câmpul tabel specificat.
De exemplu, să presupunem că vrem să știm anul în care a fost lansat cel mai vechi film din biblioteca noastră, putem folosi MySQLfuncția MIN pentru a obține informațiile dorite.
Următoarea interogare ne ajută să realizăm acest lucru
SELECT MIN(`year_released`) FROM `movies`;
Executarea interogării de mai sus în MySQL Workbench împotriva myflixdb ne oferă următoarele rezultate.
MIN('year_released') |
---|
2005 |
MAX
Așa cum sugerează și numele, funcția MAX este opusul funcției MIN. Aceasta returnează cea mai mare valoare din câmpul de tabel specificat.
Să presupunem că vrem să obținem anul în care a fost lansat cel mai recent film din baza noastră de date. Putem folosi cu ușurință funcția MAX pentru a realiza asta.
Următorul exemplu returnează ultimul an de film lansat.
SELECT MAX(`year_released`) FROM `movies`;
Executarea interogării de mai sus în MySQL Workbench folosind myflixdb ne oferă următoarele rezultate.
MAX('year_released') |
---|
2012 |
Funcția SUM
Să presupunem că vrem un raport care să ofere suma totală a plăților efectuate până acum. Putem folosi MySQL USM funcţie care returnează suma tuturor valorilor din coloana specificată. SUM funcționează numai pe câmpuri numerice. Valorile nule sunt excluse din rezultatul returnat.
Următorul tabel prezintă datele din tabelul de plăți-
plata_ id | numar de membru | Data de plată | descriere | Suma plătită | număr_de_referință_extern |
---|---|---|---|---|---|
1 | 1 | 23-07-2012 | Plată închiriere film | 2500 | 11 |
2 | 1 | 25-07-2012 | Plată închiriere film | 2000 | 12 |
3 | 3 | 30-07-2012 | Plată închiriere film | 6000 | NULL |
Interogarea prezentată mai jos primește toate plățile efectuate și le însumează pentru a returna un singur rezultat.
SELECT SUM(`amount_paid`) FROM `payments`;
Executarea interogării de mai sus în MySQL Workbench împotriva myflixdb oferă următoarele rezultate.
SUM('amount_paid') |
---|
10500 |
AVG funcţie
MySQL AVG funcţie returnează media valorilor dintr-o coloană specificată. La fel ca și funcția SUM, aceasta funcționează numai pe tipuri de date numerice.
Să presupunem că vrem să aflăm suma medie plătită. Putem folosi următoarea interogare -
SELECT AVG(`amount_paid`) FROM `payments`;
Executarea interogării de mai sus în MySQL workbench, ne oferă următoarele rezultate.
AVG('amount_paid') |
---|
3500 |
Joc de inteligență
Crezi că funcțiile agregate sunt ușoare. Incearca asta!
Următorul exemplu grupează membrii după nume, numără numărul total de plăți, suma medie a plății și totalul general al sumelor plăților.
SELECT m.`full_names`,COUNT(p.`payment_id`) AS `paymentscount`,AVG(p.`amount_paid`) AS `averagepaymentamount`,SUM(p.`amount_paid`) AS `totalpayments` FROM members m, payments p WHERE m.`membership_number` = p.`membership_number` GROUP BY m.`full_names`;
Executarea exemplului de mai sus în MySQL bancul de lucru ne oferă următoarele rezultate.
Rezumat
- MySQL acceptă toate cele cinci (5) funcții agregate standard ISO COUNT, SUM, AVG, MIN și MAX.
- SUMA și AVG funcțiile funcționează numai pe date numerice.
- Dacă doriți să excludeți valorile duplicate din rezultatele funcției agregate, utilizați cuvântul cheie DISTINCT. Cuvântul cheie ALL include chiar și duplicatele. Dacă nu este specificat nimic, ALL este considerat implicit.
- Funcțiile agregate pot fi utilizate împreună cu alte clauze SQL, cum ar fi A SE GRUPA CU