Search
Připojení k databázi:
např podle podle zadání nulté úlohy.
Další příklady: https://cw.fel.cvut.cz/wiki/courses/a4b33ds/cviceni-4-5
Cílem cvičení je ukázka použití SQL dotazu SELECT
Studnicí testovacích dat nám bude databáze navržená v minulém cvičení. Testovací databáze je přístupná přes konto 0. skupiny.
Vypište v lidské podobě seznam senzorů a veličin, které tyto senzory měří.==
SELECT * FROM "senzor";
SELECT * FROM "senzor" JOIN "velicinasenzor" USING (id_senzor);
SELECT * FROM "senzor" JOIN "velicinasenzor" USING (id_senzor) JOIN "velicina" USING (id_velicina);
SELECT "senzor".nazev,popis, "velicina".nazev, znacka || ' [' || CASE WHEN jednotka IS NULL THEN '-' ELSE jednotka END || ']' FROM "senzor" JOIN "velicinasenzor" USING (id_senzor) JOIN "velicina" USING (id_velicina);
Vypište průměrné denní hodnoty naměřené senzorem s id_senzor = 3 a veličinu id_veličina = 2.
* 1) Začneme tabulkou měření
SELECT * FROM "mereni";
* 2) Pomocí WHEREové podmínky specifikujeme záznamy, které nás zajímají
SELECT * FROM "mereni" WHERE id_senzor = 3 AND id_velicina = 2;
* 2b) (Volitelně, pokud bychom chtěli zobrazit průběh, můžeme záznamy seřadit sestupně podle času)
SELECT * FROM "mereni" WHERE id_senzor = 3 AND id_velicina = 2 ORDER BY cas ASC;
* 3) Nyní přistoupíme k agregaci záznamů. Chceme denní průměry, tedy musíme získat z času pouze datum - funkce date(). Připravíme si záznamy pomocí
SELECT date(cas), hodnota FROM "mereni" WHERE id_senzor = 3 AND id_velicina = 2;
SELECT date(cas), avg(hodnota) FROM "mereni" WHERE id_senzor = 3 AND id_velicina = 2 GROUP BY date(cas);
SELECT date(cas), avg(hodnota) FROM "mereni" WHERE id_senzor = 3 AND id_velicina = 2 GROUP BY date(cas) ORDER BY date(cas) ASC;
SELECT date(cas), id_senzor, avg(hodnota) FROM "mereni" WHERE id_velicina = 2 GROUP BY date(cas), id_senzor ORDER BY date(cas) ASC, id_senzor;
SELECT date(cas), id_senzor, avg(hodnota) FROM "mereni" WHERE id_velicina = 2 GROUP BY date(cas), id_senzor HAVING avg(hodnota)>2.1 ORDER BY date(cas) ASC, id_senzor;
Pozor, nezaměňujte WHERE podmínky na atributy před agregací s HAVING podmínkami na hodnoty výsledků agregačních funkcí!!!
SELECT avg(hodnota) FROM "mereni" WHERE id_velicina = 2;
SELECT date(cas), id_senzor, avg(hodnota) FROM "mereni" WHERE id_velicina = 2 GROUP BY date(cas), id_senzor HAVING avg(hodnota)> ( SELECT avg(hodnota) FROM "mereni" WHERE id_velicina = 2 ) ORDER BY date(cas) ASC, id_senzor;
SELECT date(cas), id_senzor, avg(hodnota) || (SELECT CASE WHEN jednotka IS NULL THEN '' ELSE jednotka END FROM "velicina" WHERE "velicina".id_velicina = "mereni".id_velicina) FROM "mereni" WHERE id_velicina = 2 GROUP BY date(cas), id_senzor, id_velicina HAVING avg(hodnota)> ( SELECT avg(hodnota) FROM "mereni" WHERE id_velicina = 2 ) ORDER BY date(cas) ASC, id_senzor;