Poslední úpravy - Vyhledat:

SQL

O modelování

Power Designer

Oracle Data Modeler

Krátká videa DM

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, 11:27