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_hry | prumerna_cena |
|---|---|
| 14810 | 740.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_zaplacena | zaokrouhleno |
|---|---|
| 736.857142857143 | 736.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_id | hra_id | pocet | cena | za_polozku |
|---|---|---|---|---|
| 5 | 4 | 1 | 799 | 799 |
| 5 | 20 | 1 | 899 | 899 |
| 6 | 2 | 2 | 399 | 798 |
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.
Jak psát:
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
3/10