05. SQL: Import/export dat, HAVING Tomáš Hrabal Cíle dnešní hodiny:  1. Import dat 2. Export dat 3. Podmínky nad agregacemi - HAVING Kontrolní otázky: Znalost příkazu GROUP BY, agregační funkce Rychlé opakování https://is.muni.cz/el/1421/podzim2018/VIKBB68/um/05_prednaska/fund2016.sqlite Jaký byl průměrný příspěvek v jednotlivých měsících? Vypište po jednotlivých měsících průměrnou částku vybranou za měsíce leden a únor. DISTINCT SELECT zdroj FROM ‘test’ VS SELECT DISTINCT zdroj from ‘test’ VS SELECT zdroj from ‘test’ GROUP BY zdroj GROUP BY​​ - umožní vám použít agregační funkce DISTINCT​​ - pouze odstraní duplikace UPDATE UPDATE ​​table​​ SET ​​column1​​ = ​​value1​​, column2​​ = value2 WHERE ... AND ... UPDATE ​test​ SET ​zdroj​ = ​'osobni'​ WHERE zdroj​ = ​'osbni' IMPORT/EXPORT EXPORT IMPORT CSV (​Comma-separated values) bohužel často implementováno chybně a místo čárky je používán středník … tato chyba je i v sqliteonline.com Přesto vyzkoušíme … https://is.muni.cz/auth/el/1421/podzim2018/VIKBB68/um/05_prednaska/b kom.csv Možné problémy s kódováním: přeuložit soubor v UTF-8 / windows-1250 / ISO-8859-2 Pokračujeme s SQL  https://is.muni.cz/auth/el/1421/podzim2018/VIKBB68/um/05_prednaska/odtahy.sqlite Vypište měsíce a počet odtahů v měsíci v ulicích začínajícíh na “p”. Vypište měsíce a počet odtahů v měsíci v ulicích začínajících na “p”. Vyberte jen ty měsíce, kdy bylo odtahů více než 75. HAVING podmínka omezující výsledek agregace WHERE​​ - omezuje výběr řádků ještě předtím, než je seskupíme (např. lidi starší než, odtahy s datem) OMEZUJE VÝBĚR NAD ŘÁDKEM V DATABÁZI GROUP BY​​ vezme řádky vyfiltrované příkazem ​WHERE​​ a rozdělí je do skupin nad kterými pak můžeme počítat agregaci (např. podle data, podle pohlaví, podle typu obecně) SESKUPÍ ŘÁDKY DO SKUPIN DLE POŽADAVKU HAVING ​​ponechá ty skupiny, u nichž výsledek agregační funkce (​AVG​​, ​SUM​​, ​COUNT​​ …) odpovídá podmínce HAVING FILTRUJE NAD VÝSLEDKEM AGREGAČNÍ FUNKCE SELECT​​ …. ​FROM​​ …. ​WHERE​​ ​...​​ ​GROUP​​ ​BY​​ ​… ​​HAVING ... SELECT strftime('%m', datum) AS mesic, COUNT(*) AS pocet FROM 'odtahy' WHERE ​ulice LIKE ‘p%’​​ GROUP BY ​strftime(‘%m’, datum) ​​HAVING ​pocet > 75 SELECT strftime('%m', datum) AS ​mesic​​, COUNT(*) AS pocet FROM 'odtahy' WHERE ​ulice LIKE ‘p%’​​ GROUP BY ​mesic ​​HAVING ​pocet > 75 Vypište měsíce a počet odtahů. Vypočítejte počet odtahů za každý jednotlivý první den v každém měsíci. Vyřaďte měsíce, kdy bylo odtáhnuto méně než 10 aut.