Nachádzate sa tu
05. Výpočty v SQL
Celý čas hovoríme o tom, že SQL je jazyk databázový, avšak vo svojej podstate sa jedná o výkonný výpočtový nástroj, prostredníctvom ktorého je možné robiť SQL kalkulácie nad obrovskými dátovými súbormi.
V SQL je v podstate možné vypočítať čokoľvek podobne ako je tomu v Exceli. Veľkou výhodou SQL je, že sa prostredníctvom GROUP BY vieme pohybovať a teda robiť výpočty na rôznych úrovniach detailu v tabuľke.
V predchádzajúcom článku sme si ukázali funkciu sum() prostredníctvom ktorej sme rátali sumu tržieb na rôznych úrovniach v rámci jednej spoločnosti. Analogicky, podobne ako je tomu v Exceli vieme zadefinovať iné základné SQL funkcie, ktoré si ukážeme na príklade tabuľky zamestnancov, ktorá obsahuje tri stĺpce: ID_zamestnanec, mzda, pocet_rokov.
SUM, AVG – suma a priemer
SELECT SUM(mzda) as celkova_vyplatena_mzda, AVG(mzda) as priemerna_mzda FROM tabulka_zamestnanci
MIN – minimum
SELECT MIN(mzda) as minimalna_mzda FROM tabulka_zamestnanci
MAX– maximum
SELECT MAX(mzda) as maximalna_mzda FROM tabulka_zamestnanci
COUNT – počet
SELECT COUNT(mzda) as pocet_vyplatenych_miezd, COUNT(ID_zamestnanec) as pocet_zamestnancov FROM tabulka_zamestnanci
V prípade COUNT je jedno, či je pole numerického alebo textového typu. Funkcia v podstate zráta záznamy a teda v oboch prípadoch vráti rovnaké číslo.
Doposiaľ sme sa zaoberali výpočtami len v rámci jedného stĺpca v tabuľke. Matematické operácie je samozrejme možné robiť aj v rámci jednotlivých stĺpcov. V nasledovnom príklade vyrátame celkovú mzdu zamestnanca, ktorá bude pozostávať z ročnej mzdy a odmien, pričom odmeny sa budú odvýjať od výšky ročnej mzdy, koeficienu odmien (0.01) ako aj od počtu rokov, koľko zamestnanec vo firme pracuje.
Matematicky celkovú mzdu vyrátame nasledovne: celkova_mzda=mzda+odmeny, kde odmeny=0.01*pocet_rokov*mzda. Celkovo teda máme rovnicu: celkova_mzda=mzda+0.01*pocet_rokov*mzda.
Výpočet zbehneme v dvoch variantách, a to na úrovni jednotlivých klientov, ako aj na úrovni celej spoločnosti.
Úroveň klientov:
SELECT ID_zamestnanec, SUM(mzda+0.01*pocet_rokov*mzda) as celkova_mzda FROM tabulka_zamestnanci
GROUP BY ID_zamestnanec
ORDER BY celkova_mzda desc [v pripade Access SQL: ORDER BY (mzda+0.01*pocet_rokov*mzda)] desc)
Úroveň celej spoločnosti:
SELECT SUM(mzda+0.01*pocet_rokov*mzda) as celkova_mzda FROM tabulka_zamestnanci
ORDER BY celkova_mzda [v pripade Access SQL: ORDER BY (mzda+0.01*pocet_rokov*mzda)]
V tomto tutoriáli sme priblížili spôsob ako robiť základné výpočty v SQL. Ako sme už spomenuli, v SQL je možné využiť množstvo rôznych vstavaných SQL funkcií, pričom sa dajú samozrejme naprogramovať aj rôzne vlastné, napríklad funkcie normálneho rozdelenia nomdist(), norminv() atd. .