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);
iddatummesicrok
42024-03-152024-032024
172025-03-032025-032025
282025-11-282025-112025

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.

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:

rokpocet_objednavektrzby
20241415686
20251415561

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:

mesicpocet_objednavektrzby
2025-021899
2025-0311028
2025-041999
………

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