AGREGACE Distinct, Group By, Having, SUM, …
DISTINCT Slučování stejných řádků ve výsledku dotazu. AGREGACE 2 JménoPříjmeníID FrantišekVomáčka1 JosefPokorný2 FrantišekNovák3 SELECT DISTINCT jméno FROM lidé Jméno František Josef
LIMIT (TOP) Omezení počtu řádků ve výsledku AGREGACE 3 SELECT nazev FROM obce ORDER BY obyvatele LIMIT 10 Jen deset řádků SELECT nazev FROM obce ORDER BY obyvatele LIMIT 10 OFFSET 20 Jen deset řádků, začínáme od dvacátého
SESKUPOVÁNÍ DAT GROUP BY, HAVING AGREGACE 4
GROUP BY Umožňuje získávat souhrnné výsledky dat podle nějakých kritérií. Říká: vezmi výsledky SELECTu, dej je dohromady podle těchto sloupečků a pak získej následující informace. Nemá smysl použít GROUP BY bez agregačních funkcí v seznamu sloupců. Na vypočítávané sloupce nelze použít WHERE. AGREGACE 5
AGREGAČNÍ FUNKCE COUNT (sloupec) - počet neprázdných řádků v daném sloupci, lze použít (*) SUM (sloupec) - součet všech hodnot ve sloupci AVG (sloupec) - průměr hodnot ve sloupci MAX (sloupec) – největší hodnota ve sloupci MIN (sloupec) – nejmenší hodnota ve sloupci AGREGACE 6
PŘÍKLAD: POČET LIDÍ SE JMÉNEM AGREGACE 7 IDJménoPříjmení 0FrantišekVomáčka 1JanPokorný 2FrantišekČerný 3JanaPokorná SELECT Jméno, COUNT(Jméno) FROM Lidé GROUP BY Jméno JménoCount(Jméno) František2 Jan1 Jana1
AS Sloupce s agregacemi se špatně zpracovávají Je vhodné je přejmenovat pomocí AS AGREGACE 8 SELECT Jméno, COUNT(Jméno) AS Počet FROM Lidé GROUP BY Jméno JménoPočet František2 Jan1 Jana1
HAVING Restrikce na sloupce s vypočítávanou (agregovanou) hodnotou AGREGACE 9 IDJménoPříjmení 0FrantišekVomáčka 1JanPokorný 2FrantišekČerný 3JanaPokorná SELECT Jméno, COUNT(Jméno) AS Počet FROM Lidé GROUP BY Jméno HAVING Počet > 1 JménoPočet František2
POŘADÍ ČÁSTÍ SELECT 1.SELECT 2.FROM (JOIN) 3.WHERE 4.GROUP BY 5.HAVING 6.ORDER BY 7.(LIMIT) AGREGACE 10
VYHODNOCENÍ SELECTU 1.Sestaví se všechny řádky a všechny sloupce na všech tabulkách (kartézský součin) 2.Omezí se sloupce 3.Omezí se řádky WHERE 4.Provede se GROUP BY 5.Vypočítají se agregované sloupce 6.Omezí se přes HAVING 7.Řádky se seřadí pomocí ORDER BY AGREGACE 11