Tržby po měsících
Nabídky odejdou příští týden a obchod chce vědět, jak se mu teď daří, aby to mohl později porovnat: tržby za každý měsíc.
Tržby jsou peníze, které obchod dostal: u každé položky každé zaplacené objednávky počet krát cena. Cenu berte z tabulky polozky, kde je to, co zákazník opravdu zaplatil. Na Black Friday dostala objednávka 28 hry levněji, než říká hry.cena.
Abyste mohli objednávky seskupit po měsících, potřebujete měsíc každé objednávky, a ten z data udělá strftime(): strftime('%Y-%m', datum) dá rok a měsíc, například '2025-11', a strftime('%Y', datum) jen rok:
SELECT id, datum,
strftime('%Y-%m', datum) AS mesic,
strftime('%Y', datum) AS rok
FROM objednavky
WHERE id IN (4, 17, 28);| id | datum | mesic | rok |
|---|---|---|---|
| 4 | 2024-03-15 | 2024-03 | 2024 |
| 17 | 2025-03-03 | 2025-03 | 2025 |
| 28 | 2025-11-28 | 2025-11 | 2025 |
Když takovému sloupci dáte alias, můžete ho použít v GROUP BY i v ORDER BY. Měsíce zapsané jako 'RRRR-MM' se řadí podle času, stejně jako celá data.
Typická chyba: počítat objednávky pomocí COUNT(*). Po spojení s tabulkou polozky je každá objednávka ve výsledku tolikrát, kolik má her, takže COUNT(*) počítá položky, a ne objednávky. COUNT(DISTINCT o.id) započítá každou objednávku jednou.
A ještě jedna past: strftime() vrací text, takže jeho výsledek porovnávejte s textem: strftime('%Y', datum) = '2025'. S číslem 2025 podmínka nikdy neplatí, protože číslo a text SQLite za stejné nepovažuje.
Jak psát:
Pokyny
Pod komentářem -- 5. Tržby po měsících začněte celkovým pohledem, tržbami za každý rok: sloupce rok, pocet_objednavek (počet zaplacených objednávek) a trzby, seřazené podle roku:
| rok | pocet_objednavek | trzby |
|---|---|---|
| 2024 | 14 | 15686 |
| 2025 | 14 | 15561 |
Pod tím ukažte rok 2025 po měsících: sloupce mesic (jako 'RRRR-MM'), pocet_objednavek a trzby, jen pro objednávky z roku 2025, seřazené podle měsíce. Výsledek začíná takto:
| mesic | pocet_objednavek | trzby |
|---|---|---|
| 2025-02 | 1 | 899 |
| 2025-03 | 1 | 1028 |
| 2025-04 | 1 | 999 |
| … | … | … |
Začněte programovat zdarma
5/6