|
CAST | Funkce definované normou SQL |
agregační_funkce ::= { COUNT | SUM | AVG | MIN | MAX
} ([ ALL | DISTINCT ] výraz) | COUNT(*)
Agregační funkce počítají nad množinou hodnot výrazu v odpovědi na dotaz počet hodnot (COUNT), součet (SUM), průměr (AVG), minimum (MIN) a maximum (MAX). Výpočet se provádí buď nad všemi záznamy v odpovědi na dotaz (pokud dotaz neobsahuje GROUP BY) nebo nad každou skupinou určenou GROUP BY. Argumentem těchto funkcí může být libovolný výraz neobsahující jinou agregační funkci - hodnota funkce se počítá z těch hodnot argumentů, které jsou různé od NULL. Pro funkce SUM a AVG argument musí být číselného typu, pro funkce MAX a MIN buď číselného typu nebo některého z typů typu DATE, TIME, TIMESTAMP, BOOLEAN a řetězec znaků.
Mimo to argumentem funkce COUNT smí být také znak *, v takovém případě funkce vrací počet všech hodnot, včetně těch, které se rovnají NULL.
Pokud se před argumentem funkce uvede DISTINCT, uvažují se pouze různé hodnoty argumentů (u funkcí MAX a MIN to nemá žádný význam), pokud se uvede ALL nebo se neuvede nic, uvažují se všechny hodnoty.
Agregační funkce se v dotazech používají v klauzuli SELECT nebo HAVING. Nelze je používat v klauzulích WHERE nebo GROUP BY. V klauzuli ORDER BY je nutno je nahradit jménem výsledného sloupce, které lze specifikovat pomocí AS v klauzuli SELECT.
Pokud funkce pracují nad prázdnou množinou hodnot, pak COUNT vrací 0 a ostatní funkce vracejí NULL.
Odchylky od Intermediate level směrem k Full level nebo k SQL 3
Odchylky od Intermediate level směrem k Entry level
Implementací definované vlastnosti SQL ve 602SQL
AVG(I + 0.0)
.Příklad použití:
Spočítat faktury
SELECT COUNT(cislo) FROM Faktury
Vybrat faktury s hodnotou rovné minimální
SELECT *
FROM Faktury
WHERE castka = (SELECT MIN(castka) FROM faktury)
Vybrat firmy, které mají faktury za více než 10000 (tento dotaz lze zapsat efektivněji s využitím klauzule HAVING):
SELECT A.nazev
FROM Firmy A
WHERE 10000 < (SELECT SUM(B.castka)
FROM Faktury B
WHERE A.cislo=B.firma)
Zjistit počet firem, které mají alespoň jednu fakturu za víc než 5000
SELECT COUNT (DISTINCT Firmy.nazev)
FROM Faktury,Firmy
WHERE (castka > 5000)
AND (Firmy.cislo=Faktury.firma)
CAST | Funkce definované normou SQL |