Počítání řádků
Zatím každý dotaz ukazoval řádky: jeden řádek výsledku pro každý řádek tabulky, který našel. Často ale chcete místo toho jediné číslo. Kolik má obchod zákazníků? Kolik her prodal? Kolik vydělal? Na takové otázky má SQL agregační funkce. Agregační funkce vezme mnoho řádků a udělá z nich jednu hodnotu.
Nejjednodušší z nich je COUNT(*) (count znamená spočítat). Počítá řádky:
SELECT COUNT(*)
FROM zakaznici;| COUNT(*) |
|---|
| 14 |
Výsledek má jeden řádek a jeden sloupec a ten se jmenuje podle toho, co jste napsali: COUNT(*). Pomocí AS mu můžete dát lepší název, stejně jako výpočtům ve druhé lekci:
SELECT COUNT(*) AS pocet_zakazniku
FROM zakaznici;| pocet_zakazniku |
|---|
| 14 |
COUNT(*) funguje dohromady s WHERE: databáze nejdřív najde řádky, které splňují podmínku, a pak spočítá jen ty. Tolik zákazníků bydlí v Praze:
SELECT COUNT(*) AS z_prahy
FROM zakaznici
WHERE mesto = 'Praha';| z_prahy |
|---|
| 4 |
Dotaz s agregační funkcí vrátí jeden řádek, i když podmínku nesplňuje žádný řádek. Z Olomouce obchod žádné zákazníky nemá, takže COUNT(*) řekne 0:
SELECT COUNT(*) AS z_olomouce
FROM zakaznici
WHERE mesto = 'Olomouc';| z_olomouce |
|---|
| 0 |
Hvězdička v COUNT(*) znamená celé řádky: počítá je bez ohledu na to, co v nich je. V dalším cvičení uvidíte, co se stane, když do závorek místo ní napíšete sloupec. A agregační funkce umí kromě počítání také sčítat, počítat průměr a najít nejmenší a největší hodnotu; všechny je poznáte v této lekci.
Typická chyba: sloupec vedle COUNT(*). Výsledek dotazu SELECT jmeno, COUNT(*) FROM zakaznici; má jeden řádek, které ze 14 jmen v něm tedy má být? Většina databází ohlásí chybu. SQLite ne, ukáže jméno jednoho ze zákazníků:
| jmeno | COUNT(*) |
|---|---|
| Eva Novotná | 14 |
Vypadá to, jako by Eva Novotná měla 14 něčeho, což je nesmysl. Zatím se tedy ptejte buď na řádky, nebo na počet, ne na obojí v jednom dotazu. Později v této lekci se naučíte spočítat třeba zákazníky každého města zvlášť.
Jak psát:
Pokyny
Spočítejte všechny objednávky v tabulce objednavky. Sloupec pojmenujte pocet_objednavek:
| pocet_objednavek |
|---|
| 30 |
Pod tím spočítejte jen vrácené objednávky, tedy ty, jejichž stav je 'vraceno'. Sloupec pojmenujte vracene_objednavky:
| vracene_objednavky |
|---|
| 2 |
A spočítejte hry, které vyšly v roce 2025, ve sloupci vydane_2025:
| vydane_2025 |
|---|
| 4 |
Začněte programovat zdarma
1/10