Poddotazy jako sloupce

Poddotaz může být i sloupcem výsledku. Kolik recenzí má každá hra?

SELECT h.nazev,
       (SELECT COUNT(*) FROM recenze AS r WHERE r.hra_id = h.id) AS pocet_recenzi
FROM hry AS h
ORDER BY pocet_recenzi DESC, h.nazev;
nazevpocet_recenzi
Dragon Forge4
Cube Logic2
Knight's Oath2
Moon Farm2
……

Poddotaz je korelovaný, stejně jako ty s EXISTS: odkazuje se na h.id, hru z řádku vnějšího dotazu. Pro každou hru databáze spočítá recenze s jejím ID a číslo dá do sloupce pocet_recenzi. Castle Siege a další hry bez recenze dostanou 0, protože COUNT(*) z žádných řádků je 0.

Poddotaz v SELECT musí pro každý řádek dát jednu hodnotu: musí vracet jeden sloupec a měl by najít nejvýš jeden řádek (z několika by SQLite potichu vzalo první), takže to bývá agregační funkce. Když nenajde žádný řádek, je hodnota NULL. A sloupci dejte alias, jinak se bude jmenovat celým textem poddotazu.

Počítat umíte i jinak: pomocí LEFT JOIN s GROUP BY a COUNT(r.hvezdicky) ze 6. lekce. Obojí dá stejný výsledek. Poddotaz se hodí, když potřebujete víc čísel z různých tabulek: každý poddotaz počítá sám za sebe, takže se řádky nenásobí tak jako tehdy, když ke hrám připojíte zároveň recenze i polozky (jedna ze záludností spojování z 6. lekce).

Typická chyba: zapomenout na podmínku, která poddotaz spojuje s řádkem. (SELECT COUNT(*) FROM recenze) spočítá všechny recenze v tabulce, takže by u každé hry bylo 25.

Pokyny

Pro každého zákazníka ukažte jméno a datum jeho poslední objednávky jako posledni_objednavka. Použijte poddotaz v SELECT, který najde nejpozdější datum objednávek zákazníka. Seřaďte podle jména:

jmenoposledni_objednavka
Adéla Králová2025-09-27
Anna Kučerová2025-04-15
Eva Novotná2025-11-14
Filip BenešNULL
……

Filip Beneš a Martin Zeman si nikdy nic neobjednali, takže mají ve sloupci posledni_objednavka hodnotu NULL. Ukažte místo ní text nikdy: dejte celý poddotaz do COALESCE(). Výsledek pak začíná takto:

jmenoposledni_objednavka
Adéla Králová2025-09-27
Anna Kučerová2025-04-15
Eva Novotná2025-11-14
Filip Benešnikdy
……

Pod to ukažte pro každou hru její název, počet kusů, které si zákazníci objednali, jako kusy (součet sloupce pocet v tabulce polozky), a průměrný počet hvězdiček zaokrouhlený na jedno desetinné místo jako hodnoceni. Budete potřebovat dva poddotazy. Seřaďte podle názvu:

nazevkusyhodnoceni
Bakery Story34.0
Castle Siege1NULL
Cube Logic34.0
Dragon Forge44.3
………

Začněte programovat zdarma

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

Nebo se registrujte pomocí:

5/8