Poslední úpravy - Vyhledat:

SQL

O modelování

Power Designer

Oracle Data Modeler

Zdroje...

edit SideBar

SQL /

Agregace

< Self join | SQL postupně | Agregace pokračování >

Databáze obsahují množství číselných údajů, ze kterých lze vypočítat různé souhrny: součet, průměr, maximum, minimum. Také ostatní údaje lze počítat: kolik jich je jako takových, nebo kolik jich je navzájem různých. Můžeme počítat i počty řádků bez ohledu na to, co je v nich.

K tomu slouží dotazy s agregačními funkcemi:

  • sum(<výraz>) ...součet výraz
  • avg(<výraz>) ...průměr z výraz
  • min(<výraz>) ...minimum z výraz
  • max(<výraz>) ...maximum z výrazu
  • count(<výraz>) ...počet neprázdných (not NULL) hodnot výrazu
  • count(*) ...počet řádků
  • count(distinct <výraz>) ...počet různých hodnot výrazu

Dá se počítat souhrn z celé tabulky nebo z nějaké její části:


Příklad: Spočítejte průměrnou cenu limonád.

        select avg(JCEN) as PRUM_CENA
        from ZBOZ
        where KAT='limo';

Příklad: Spočítejte počet všech druhů zboží.

        select count(*) as POCET_ZBOZI
        from ZBOZ;

Příklad: Spočítejte počet aktivních druhů zboží.

        select count(*) as POCET_ZBOZI
        from ZBOZ
        where AKTI=1;

Příklad: Spočítejte počet různých druhů zboží, které byly někdy objednány .

        select count(distinct KOD) as POCET_OBJEDNAVANYCH_ZBOZI
        from POLOZ;

Příklad: Spočítejte počet objednávek a počet odeslaných objednávek.

        select count(*) as POCET_OBJEDNAVEK, count(DATOD) as POCET_ODESLANYCH
        from OBJ;

Většinou chceme v dotazu s agregací specifikovat rozdělení do skupin, v nichž se má agregace počítat. K tomu slouží klauzule GROUP BY.

Příklad: Spočítejte průměrnou cenu zboží podle kategorií a počet druhů zboží v té kategorii.

        select KAT, avg(JCEN) as PRUM_CENA, count(*) as POCET_ZBOZI
        from ZBOZ
        group by KAT;
Následující příkaz výsledek uspořádá podle té průměrné ceny sestupně:
        select KAT, avg(JCEN) as PRUM_CENA, count(*) as POCET_ZBOZI
        from ZBOZ
        group by KAT
        order by 2 desc;

Příklad: Spočítejte počty druhů zboží podle kategorií, rozdělte na aktivní a neaktivní.

        select KAT, AKTI, count(*) as POCET_ZBOZI
        from ZBOZ
        group by KAT, AKTI
        order by 1,2 desc;

Příklad: Spočítejte počet aktivních druhů zboží pro každou kategori.

        select KAT, count(*) as POCET_AKTI_ZBOZI
        from ZBOZ
        where AKTI=1
        group by KAT;

Příklad: Spočítejte počet objednávek s firemním rozvozem (DOPR=2) v jednotlivých letech.

        select extract(year from DAT) as ROK, count(*) as POCET_ROZVAZENYCH_OBJEDNAVEK
        from OBJ
        where DOPR=2
        group by extract(year from DAT)
        order by 1,2;
Funkce extract() je specifická pro Oracle. V ostatních databázových systémech mají podobné funkce jiné názvy.

Příklad: Spočítejte počet objednávek v jednotlivých letech, rozdělte podle typu dopravy.

        select extract(year from DAT) as ROK, DOPR, count(*) as POCET_OBJEDNAVEK
        from OBJ
        group by extract(year from DAT),DOPR
        order by 1,2;

Příklad: Pro každou objednávku spočítejte celkovou částku za zboží.

        select CISO,sum(VCEN) as MEZISOUCET
        from POLOZ
        group by CISO
        order by 1;


Můžeme chtít vybrat jen skupiny, které splňují nějakou podmínku. Smyslupné podmínky v takovém případě se týkají vypočtených agregací. K tomu slouží klauzule HAVING. (Do klauzele WHERE je napsat nelze...!)

Příklad: Které objednávky byly za více než 1000?

        select CISO
        from POLOZ
        group by CISO
        having sum(VCEN) > 1000;

Příklad: Ve kterých kategoriích jsou méně než 4 aktivní druhy zboží?

        select KAT
        from ZBOZ
        where AKTI=1
        group by KAT
        having count(*) < 4;

< Self join | SQL postupně | Agregace pokračování >

Upravit - Historie - Tisk - Poslední úpravy - Vyhledat
Poslední úprava stránky: 28.12.2011, 12:27