Procvičování: podrobnosti objednávek
Je čas dát dohromady celou lekci. Obchod chce vidět podrobnosti svých objednávek: co v nich bylo, kdo je zadal a na kolik vyšly. Každý dotaz potřebuje několik tabulek, a když ho píšete, pomáhá postupovat krok za krokem:
- Ve kterých tabulkách jsou data? Sepište si sloupce, které chcete ukázat a podle kterých chcete filtrovat a řadit, a najděte tabulky, ve kterých jsou.
- Jak jsou tabulky propojené? Sledujte cizí klíče: každý je jeden JOIN se svým ON. Po každém JOINu dotaz spusťte a podívejte se na řádky: dává jejich počet smysl?
- JOIN, nebo LEFT JOIN? Potřebujete i řádky bez protějšku, třeba zákazníky bez objednávky? Pak LEFT JOIN, a podmínky na jeho pravou tabulku patří do ON.
- WHERE, GROUP BY, HAVING, ORDER BY fungují stejně jako nad jednou tabulkou, jen s kvalifikovanými názvy. Řaďte i podle dalšího sloupce pro případ shody.
- Zkontrolujte čísla. Jsou moc velká? Pak se možná některé řádky znásobily: počítejte pomocí COUNT(DISTINCT …).
Částky objednávek fungují stejně jako tržba: každá položka vynesla p.pocet * p.cena a částka objednávky je součet jejích položek, takže seskupujete podle objednávky.
Jak psát:
Pokyny
Účtenky Kristýny Fialové: ukažte každou položku každé její objednávky s těmito údaji: objednavka_id, datum objednávky, nazev hry, pocet, cena, kterou zaplatila za jeden kus, a cenu celé položky (počet krát cena) jako mezisoucet. Její objednávky najděte podle jména a řádky seřaďte podle objednavka_id, potom podle nazev:
| objednavka_id | datum | nazev | pocet | cena | mezisoucet |
|---|---|---|---|---|---|
| 23 | 2025-08-30 | Word Quest | 1 | 249 | 249 |
| 28 | 2025-11-28 | Shadow Ninja | 1 | 399 | 399 |
| 28 | 2025-11-28 | Zombie Town | 1 | 499 | 499 |
Pod něj ukažte celkovou částku každé zaplacené objednávky se jménem zákazníka: objednavka_id, datum, jmeno zákazníka, počet kusů v objednávce jako kusy a celkovou částku jako celkem. Objednávky seřaďte podle celkem od nejvyšší, potom podle objednavka_id:
| objednavka_id | datum | jmeno | kusy | celkem |
|---|---|---|---|---|
| 11 | 2024-09-30 | Jakub Dvořák | 2 | 2198 |
| 14 | 2024-12-20 | Eva Novotná | 2 | 1998 |
| 5 | 2024-04-02 | Lukáš Procházka | 2 | 1698 |
| 25 | 2025-10-10 | Tomáš Veselý | 2 | 1698 |
| 10 | 2024-08-23 | Matěj Němec | 2 | 1648 |
| … | … | … | … | … |
Nakonec chce obchod vědět, odkud jeho peníze přicházejí. U každého města ukažte počet zaplacených objednávek jeho zákazníků jako pocet_objednavek a jejich tržbu jako trzba. Zákazníky bez města započítejte pod 'neuvedeno': město ukažte pomocí COALESCE jako mesto. Pozor: objednávka může mít několik položek, takže objednávky počítejte tak, aby se každá započítala jednou. Města seřaďte podle trzba od nejvyšší, potom podle mesto:
| mesto | pocet_objednavek | trzba |
|---|---|---|
| Praha | 11 | 12994 |
| Brno | 7 | 7540 |
| Ostrava | 4 | 5493 |
| Plzeň | 4 | 3423 |
| neuvedeno | 2 | 1797 |
Začněte programovat zdarma
12/12