Součty a průměry

COUNT počítá, SUM sčítá. SUM(sloupec) sečte hodnoty sloupce ve všech nalezených řádcích a AVG(sloupec) (z anglického average, průměr) vrátí jejich průměr: součet vydělený počtem hodnot. Kdybyste si od každé hry v obchodě koupili jeden kus, zaplatili byste:

SELECT SUM(cena) AS vsechny_hry,
       AVG(cena) AS prumerna_cena
FROM hry;
vsechny_hryprumerna_cena
14810740.5

Pamatujete si ze čtvrté lekce, že 7 / 2 je 3, protože obě čísla jsou celá? AVG to nedělá: vrací vždycky desetinné číslo, i když jsou všechny hodnoty celé. A průměr mívá spoustu desetinných míst, proto ho obvykle zaokrouhlíte pomocí ROUND. Tohle je průměrná cena v tabulce polozky, tak jak je, a zaokrouhlená:

SELECT AVG(cena) AS prumerna_zaplacena,
       ROUND(AVG(cena), 2) AS zaokrouhleno
FROM polozky;
prumerna_zaplacenazaokrouhleno
736.857142857143736.86

Do závorek můžete napsat jakýkoli výraz, nejen sloupec. Databáze ho spočítá pro každý řádek a výsledky pak sečte. Takhle zjistíte, jakou hodnotu mají objednávky. V tabulce polozky má každý řádek počet kusů a cenu jednoho kusu, takže řádek má hodnotu pocet * cena. Tohle jsou položky objednávek 5 a 6:

SELECT objednavka_id, hra_id, pocet, cena,
       pocet * cena AS za_polozku
FROM polozky
WHERE objednavka_id IN (5, 6);
objednavka_idhra_idpocetcenaza_polozku
541799799
5201899899
622399798

A tohle sečte jejich za_polozku:

SELECT SUM(pocet * cena) AS celkem
FROM polozky
WHERE objednavka_id IN (5, 6);
celkem
2496

Součet přes celou tabulku polozky je hodnota všeho, co si zákazníci objednali. Není to ale přesně to, co obchod vydělal: jsou v něm i položky dvou vrácených objednávek, za které zákazníci dostali peníze zpátky. To, že byla objednávka vrácená, je zapsané v jiné tabulce, v tabulce objednavky, a spojovat tabulky se naučíte až v příští lekci. Do té doby počítají součty v této lekci i s vrácenými objednávkami, kromě posledního cvičení, kde je vynecháte jinak.

Stejně jako COUNT(sloupec) i SUM a AVG přeskakují NULL, takže AVG dělí počtem hodnot, ne řádků. A když není co sčítat, protože WHERE nenašlo žádný řádek, vrátí NULL, ne 0. Pokud tam potřebujete 0, použijte COALESCE(SUM(cena), 0) ze čtvrté lekce.

Typická chyba: SUM(cena) místo SUM(pocet * cena). V objednávce 6 si zákaznice koupila dva kusy hry Pixel Racer a SUM(cena) by započítal jen jeden.

Pokyny

Kolik kusů her si zákazníci objednali? Sečtěte sloupec pocet tabulky polozky, ve sloupci objednane_kusy:

objednane_kusy
45

Pod tím spočítejte hodnotu všech objednaných položek: součet pocet * cena, ve sloupci hodnota_polozek:

hodnota_polozek
32795

A ukažte průměrnou cenu her vhodných pro všechny věkové kategorie (vek_od 3), zaokrouhlenou na 2 desetinná místa, ve sloupci prumerna_cena:

prumerna_cena
674.71

Začněte programovat zdarma

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

3/10