Výpočty v dotazech
Dotaz může ukázat víc, než co je uložené v tabulce. Za SELECT můžete napsat výpočet a databáze ho provede pro každý řádek. Kolik by hry stály ve výprodeji se slevou 100 Kč na každou?
SELECT nazev, cena, cena - 100
FROM hry;| nazev | cena | cena - 100 |
|---|---|---|
| Dragon Forge | 999 | 899 |
| Pixel Racer | 399 | 299 |
| Moon Farm | 499 | 399 |
| … | … | … |
Můžete sčítat (+), odčítat (-), násobit (*) a dělit (/). Výpočet může používat sloupec a číslo jako tady, nebo několik sloupců: v tabulce polozky je pocet * cena částka, kterou zákazník zaplatil za všechny kusy hry. Stejně jako v matematice má * a / přednost před + a - a můžete použít závorky: cena + 5 * 2 přičte k ceně 10, kdežto (cena + 5) * 2 přičte 5 a výsledek zdvojnásobí. Násobí se hvězdičkou, ne písmenem x. A SQLite umí počítat i bez tabulky: SELECT 7 * 6; ukáže 42.
Vypočítaný sloupec v tabulce není, takže nemá vlastní název. Výsledek ho pojmenuje podle výpočtu, přesně tak, jak jste ho napsali: cena - 100. Když napíšete cena-100 bez mezer, bude se sloupec jmenovat cena-100. V příštím cvičení se naučíte dát mu lepší název.
Výpočet mění jen to, co dotaz ukáže. Tabulka zůstane, jak byla: hry po tomto dotazu stojí pořád stejně. (Jak data v tabulce změnit, se naučíte později v kurzu.)
Fungují i desetinná čísla, jen se v SQL píšou s desetinnou tečkou, ne s čárkou: cena * 0.8 je cena po slevě 20 %. Výsledek je pak desetinné číslo, třeba 799.2. Pozor ale na dělení: když jsou obě čísla celá, je celý i výsledek, takže 25 / 2 dá 12, a ne 12,5. Proč a co s tím, se naučíte ve 4. lekci.
Typická chyba: desetinná čárka. SELECT nazev, cena * 0,8 FROM hry; neskončí chybou, ale čárka v něm odděluje sloupce, a tak výsledek místo ceny po slevě ukáže dva sloupce: cena * 0 se samými nulami a 8 se samými osmičkami.
Jak psát:
Pokyny
Ukažte ID objednávky, ID hry, počet a cenu každé položky v tabulce polozky a v posledním sloupci, kolik zákazník zaplatil za všechny její kusy: počet krát cenu. Seřaďte položky podle počtu od největšího a položky se stejným počtem podle ID objednávky. První řádky jsou položky se dvěma kusy. (Poslední sloupec se jmenuje podle výpočtu tak, jak ho napíšete, takže se jeho název může lišit.)
| objednavka_id | hra_id | pocet | cena | pocet * cena |
|---|---|---|---|---|
| 6 | 2 | 2 | 399 | 798 |
| 15 | 11 | 2 | 649 | 1298 |
| 22 | 14 | 2 | 799 | 1598 |
| … | … | … | … | … |
Pod tím ukažte ID hry, ID zákazníka a hvězdičky každé recenze a v posledním sloupci hvězdičky jako skóre ze 100: hvězdičky krát 20. Seřaďte recenze podle ID hry a recenze stejné hry podle ID zákazníka:
| hra_id | zakaznik_id | hvezdicky | hvezdicky * 20 |
|---|---|---|---|
| 1 | 1 | 4 | 80 |
| 1 | 2 | 5 | 100 |
| 1 | 5 | 3 | 60 |
| … | … | … | … |
Začněte programovat zdarma
8/12