Agregatne funkcije u MySQL
Agregatne funkcije su sve o tome
- Izvođenje izračuna na više redaka
- Od jednog stupca tablice
- I vraćanje jedne vrijednosti.
ISO standard definira pet (5) agregatnih funkcija i to;
1) BROJATI
2) SUM
3) AVG
4) MIN
5) MAKS
Zašto koristiti agregatne funkcije
Iz poslovne perspektive, različite organizacijske razine imaju različite zahtjeve za informacijama. Menadžeri najviše razine obično su zainteresirani za poznavanje cijelih brojki, a ne nužno za pojedinačne detalje.
Skupne funkcije omogućuju nam jednostavnu izradu sažetih podataka iz naše baze podataka.
Na primjer, iz naše baze podataka myflix, menadžment može zahtijevati sljedeća izvješća
- Najmanje iznajmljivani filmovi.
- Većina iznajmljivanih filmova.
- Prosječan broj iznajmljivanja svakog filma u mjesecu.
Lako izrađujemo gornja izvješća pomoću agregatnih funkcija.
Pogledajmo detaljnije agregatne funkcije.
COUNT funkcija
Funkcija COUNT vraća ukupan broj vrijednosti u navedenom polju. Radi i na numeričkim i na nenumeričkim tipovima podataka. Sve agregatne funkcije prema zadanim postavkama isključuju null vrijednosti prije rada na podacima.
COUNT (*) je posebna implementacija funkcije COUNT koja vraća broj svih redaka u navedenoj tablici. COUNT (*) također uzima u obzir nulls i duplikate.
Donja tablica prikazuje podatke u tablici posudbe filmova
referentni_ broj | Datum transakcije | Datum povratka | članski broj | film_id | film_ se vratio |
---|---|---|---|---|---|
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 |
Pretpostavimo da želimo dobiti koliko je puta film s ID-om 2 iznajmljen
SELECT COUNT(`movie_id`) FROM `movierentals` WHERE `movie_id` = 2;
Izvršavanje gornjeg upita u MySQL radna tezga u odnosu na myflixdb daje nam sljedeće rezultate.
COUNT('movie_id') |
---|
3 |
DISTINCT Ključna riječ
Ključna riječ DISTINCT koja nam omogućuje izostavljanje duplikata iz naših rezultata. To se postiže grupiranjem sličnih vrijednosti zajedno.
Da bismo razumjeli koncept Distincta, izvršimo jednostavan upit
SELECT `movie_id` FROM `movierentals`;
movie_id |
---|
1 |
2 |
2 |
2 |
3 |
Sada izvršimo isti upit s različitom ključnom riječi-
SELECT DISTINCT `movie_id` FROM `movierentals`;
Kao što je prikazano u nastavku, distinct izostavlja dvostruke zapise iz rezultata.
movie_id |
---|
1 |
2 |
3 |
MIN funkcija
Funkcija MIN vraća najmanju vrijednost u navedenom polju tablice.
Kao primjer, pretpostavimo da želimo znati godinu u kojoj je objavljen najstariji film u našoj knjižnici, možemo koristiti MySQLfunkcija MIN za dobivanje željenih informacija.
Sljedeći upit nam pomaže da to postignemo
SELECT MIN(`year_released`) FROM `movies`;
Izvršavanje gornjeg upita u MySQL workbench u odnosu na myflixdb daje nam sljedeće rezultate.
MIN('year_released') |
---|
2005 |
MAX funkcija
Kao što naziv sugerira, funkcija MAX suprotna je funkciji MIN. To vraća najveću vrijednost iz navedenog polja tablice.
Pretpostavimo da želimo dobiti godinu kada je objavljen najnoviji film u našoj bazi podataka. Lako možemo koristiti funkciju MAX da to postignemo.
Sljedeći primjer vraća posljednju godinu izdavanja filma.
SELECT MAX(`year_released`) FROM `movies`;
Izvršavanje gornjeg upita u MySQL radni stol koji koristi myflixdb daje nam sljedeće rezultate.
MAX('year_released') |
---|
2012 |
SUM funkcija
Pretpostavimo da želimo izvješće koje daje ukupan iznos plaćanja do sada. Možemo koristiti MySQL IZNOS funkcija koja vraća zbroj svih vrijednosti u navedenom stupcu. SUM radi samo na numeričkim poljima. Null vrijednosti isključene su iz vraćenog rezultata.
Sljedeća tablica prikazuje podatke u tablici plaćanja-
plaćanje_ id | članski broj | Datum plačanja | opis | uplaćeni iznos | vanjski_ referentni _broj |
---|---|---|---|---|---|
1 | 1 | 23-07-2012 | Plaćanje najma filma | 2500 | 11 |
2 | 1 | 25-07-2012 | Plaćanje najma filma | 2000 | 12 |
3 | 3 | 30-07-2012 | Plaćanje najma filma | 6000 | NULL |
Upit prikazan u nastavku dobiva sve izvršene uplate i zbraja ih kako bi vratio jedan rezultat.
SELECT SUM(`amount_paid`) FROM `payments`;
Izvršavanje gornjeg upita u MySQL workbench u odnosu na myflixdb daje sljedeće rezultate.
SUM('amount_paid') |
---|
10500 |
AVG funkcija
MySQL AVG funkcija vraća prosjek vrijednosti u određenom stupcu. Baš kao i funkcija SUM, to radi samo na numeričkim tipovima podataka.
Pretpostavimo da želimo pronaći prosječni plaćeni iznos. Možemo koristiti sljedeći upit –
SELECT AVG(`amount_paid`) FROM `payments`;
Izvršavanje gornjeg upita u MySQL radni stol, daje nam sljedeće rezultate.
AVG('amount_paid') |
---|
3500 |
Mozgalica
Mislite da su agregatne funkcije jednostavne. Pokušaj ovo!
Sljedeći primjer grupira članove po imenu, broji ukupan broj uplata, prosječni iznos isplate i ukupan zbroj iznosa isplate.
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`;
Izvođenje gornjeg primjera u MySQL radni stol nam daje sljedeće rezultate.
rezime
- MySQL podržava svih pet (5) ISO standardnih agregatnih funkcija COUNT, SUM, AVG, MIN i MAX.
- SUM i AVG funkcije rade samo na numeričkim podacima.
- Ako želite izuzeti duplicirane vrijednosti iz rezultata skupne funkcije, koristite ključnu riječ DISTINCT. Ključna riječ ALL uključuje čak i duplikate. Ako ništa nije navedeno, SVE se pretpostavlja kao zadano.
- Skupne funkcije mogu se koristiti zajedno s drugim SQL klauzulama kao što su GROUP BY