Nejžádanější hry
Seznam přání funguje a první otázka obchodu zní: které hry si zákazníci přejí nejvíc? Odpověď mu pomůže vybrat hry do příští slevy a ukáže, jaký je zájem o Robot Rebellion a Mystery Manor ještě předtím, než vyjdou.
To je otázka pro GROUP BY: jedna skupina pro každou hru a COUNT(*) spočítá její řádky, tedy kolik zákazníků má hru v seznamu přání. Seznam přání obsahuje jen ID, takže ho spojte s tabulkou hry, abyste dostali názvy, a seskupte podle hry: GROUP BY h.id, h.nazev.
Několik her bude mít stejný počet přání. Aby bylo pořadí jednoznačné, řaďte nejdřív podle počtu a pak podle názvu. V ORDER BY můžete použít alias sloupce, například ORDER BY prani DESC.
Jenže přehled, ve kterém chybí hry, které si nikdo nepřeje, je jen polovina pravdy. Abyste je dostali taky, začněte tabulkou hry a použijte LEFT JOIN: hra bez přání pak dostane jeden řádek s NULL ve sloupcích seznamu přání.
Typická chyba: COUNT(*) s LEFT JOIN. Hra bez přání má pořád ten jeden řádek, takže COUNT(*) dá 1. Počítejte raději sloupec připojené tabulky: COUNT(sloupec) vynechává NULL, takže dá 0. Tady je rozdíl na počtu objednávek každého zákazníka:
SELECT z.jmeno, COUNT(*) AS spatne, COUNT(o.id) AS pocet_objednavek
FROM zakaznici AS z
LEFT JOIN objednavky AS o ON o.zakaznik_id = z.id
GROUP BY z.id, z.jmeno
ORDER BY pocet_objednavek, z.jmeno
LIMIT 3;| jmeno | spatne | pocet_objednavek |
|---|---|---|
| Filip Beneš | 1 | 0 |
| Martin Zeman | 1 | 0 |
| Natálie Marková | 1 | 1 |
Filip Beneš a Martin Zeman si nikdy nic neobjednali, ale COUNT(*) jim dá po jedné objednávce.
Jak psát:
Pokyny
Pod komentář -- 3. Nejžádanější hry napište dotaz, který ukáže, kolik zákazníků má každou hru v seznamu přání: sloupce nazev a prani, seřazené od nejžádanější hry, a hry se stejným počtem podle názvu. První řádky:
| nazev | prani |
|---|---|
| Knight's Oath | 3 |
| Robot Rebellion | 3 |
| Dragon Forge | 2 |
| Goal Rush | 2 |
| Mystery Manor | 2 |
| … | … |
Změňte dotaz tak, aby ukázal všech 20 her, s nulou u her, které nikdo v seznamu přání nemá. Po hře Zombie Town, poslední hře s jedním přáním, výsledek pokračuje takto:
| nazev | prani |
|---|---|
| … | … |
| Zombie Town | 1 |
| Bakery Story | 0 |
| Castle Siege | 0 |
| … | … |
Začněte programovat zdarma
3/6