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;
jmenospatnepocet_objednavek
Filip Beneš10
Martin Zeman10
Natálie Marková11

Filip Beneš a Martin Zeman si nikdy nic neobjednali, ale COUNT(*) jim dá po jedné objednávce.

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:

nazevprani
Knight's Oath3
Robot Rebellion3
Dragon Forge2
Goal Rush2
Mystery Manor2
……

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:

nazevprani
……
Zombie Town1
Bakery Story0
Castle Siege0
……

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/6