4.1 Agregačné funkcie
Agregačné (group) funkcie umožňujú z viacerých riadkov tabuľky získať nejaký súhrn, napríklad súčet (SUM), počet (COUNT), priemer (AVG), minimum (MIN) a maximum (MAX).
SELECT
ROUND(MIN(salary)) AS "najnižší plat",
ROUND(MAX(salary)) AS "najvyšší plat",
ROUND(AVG(salary)) AS "priemerný plat",
COUNT(employee_id) AS "počet zamestnancov"
FROM employees;
Funkcie MIN, MAX a COUNT môžeme použiť aj na hodnoty, ktoré nie sú čísla.
SELECT
MIN(first_name), -- abecedne prvé meno
MAX(first_name) -- abecedne posledné meno
FROM employees;
Keďže súhrn je len jeden a riadkov v tabuľke veľa, v klauzule SELECT nemôžeme kombinovať agregačné funkcie a jednotlivé stĺpce. Môžeme napríklad získať súčasne minimum i maximum platu, dokonca aj počet zamestnancov, no už nie zároveň aj meno zamestnanca - meno ktorého zo zamestnancov by mal server zvoliť?
-- toto nepôjde
SELECT MIN(salary), last_name
FROM employees;
Pozor na MySQL / MariaDB - vyššie uvedený dopyt vykoná, vráti aj nejaký výsledok, no meno je vybrané nepredvídateľne a nesúvisí s minimálnym platom.
Každá z týchto funkcií má v zátvorke uvedený názov stĺpca (alebo výraz), ktorý má spracovať. Napríklad SUM(salary) v dopyte nad tabuľkou zamestnancov vráti súčet platov zamestnancov. A ktorých zamestnancov? Ak má dopyt aj selekciu s klauzulou WHERE, tak len tých, ktorí vyhovujú uvedenej podmienke. Teda agregácia sa vykoná až po selekcii.
-- toto nepôjde
SELECT last_name
FROM employees
WHERE salary = MIN(salary);
Pozor, agregačné funkcie ignorujú NULL hodnoty. Čiže napríklad COUNT(salary) vráti počet len tých zamestnancov, ktorí majú uvedený plat. A tiež AVG(salary) spočíta priemer platov, ignorujúci zamestnancov s neuvedeným platom. Ak chceme NULL hodnotu nahradiť číslom nula (alebo inou hodnotou), použijeme už známu funkciu COALESCE().
Pre zistenie počtu všetkých vyhovujúcich záznamov môžeme použiť COUNT(*) - symbol hviezdičky v podstate nahradí primárny kľúč.
Ak potrebujeme v agregačnej funkcii spracovať každú opakujúcu sa hodnotu len raz, môžeme využiť kľúčové slovo DISTINCT vo vnútri agregačnej funkcie pred názvom stĺpca, napríklad COUNT(DISTINCT first_name) vráti počet rôznych (neopakujúcich sa) mien.