Výběr hodnoty: CASE
Někdy má sloupec pro různé řádky říkat různé věci: u některých her „levná“, u jiných „drahá“. K tomu slouží CASE. Prochází podmínky jednu po druhé a vrátí hodnotu té první, která platí:
SELECT nazev, cena,
CASE
WHEN cena < 400 THEN 'levná'
WHEN cena < 900 THEN 'běžná'
ELSE 'drahá'
END AS kategorie
FROM hry
LIMIT 4;| nazev | cena | kategorie |
|---|---|---|
| Dragon Forge | 999 | drahá |
| Pixel Racer | 399 | levná |
| Moon Farm | 499 | běžná |
| Castle Siege | 799 | běžná |
Čtěte to jako: když (WHEN) je cena pod 400, pak (THEN) „levná“; když je pod 900, pak „běžná“; jinak (ELSE) „drahá“. CASE volbu začíná a END ji končí a celé to je jedna hodnota, která dostane název pomocí AS jako každý výpočet. Podmínky jsou stejné jako ve WHERE, takže mohou používat AND, OR, IN, LIKE nebo IS NULL, a hodnotami mohou být texty, čísla i výpočty. Každé WHEN napište na samostatný řádek, ať se dají číst jako seznam.
Na pořadí WHEN záleží. SQLite je prochází odshora a zastaví se u prvního, které platí. Moon Farm stojí 499 Kč: první podmínka neplatí, druhá ano, takže je „běžná“ a zbytek se přeskočí. Kdybyste první dva řádky prohodili, takže by WHEN cena < 900 bylo první, byla by „běžná“ i Cube Logic za 129 Kč: 129 je méně než 900 a k řádku s „levná“ by se SQLite vůbec nedostalo. Když se podmínky překrývají, dejte tu nejužší na začátek.
Bez ELSE dostanou řádky, na které žádná podmínka nesedí, NULL.
Když všechny podmínky porovnávají jeden sloupec s hodnotou, existuje kratší zápis: sloupec přijde hned za CASE a každé WHEN má už jen hodnotu:
SELECT id, stav,
CASE stav
WHEN 'zaplaceno' THEN 'v pořádku'
WHEN 'vraceno' THEN 'peníze vráceny'
END AS poznamka
FROM objednavky
WHERE id BETWEEN 6 AND 8;| id | stav | poznamka |
|---|---|---|
| 6 | zaplaceno | v pořádku |
| 7 | vraceno | peníze vráceny |
| 8 | zaplaceno | v pořádku |
Typická chyba: zapomenuté END. Bez něj SQLite neví, kde CASE končí, a zastaví se u prvního slova, které nečekalo: near "AS": syntax error. Když takovou chybu dostanete poblíž CASE, zkontrolujte, že má své END.
Jak psát:
Pokyny
Rodiče chtějí vědět, pro koho je která hra. Ukažte název, věkovou hranici a publikum: dospělí pro hry od 18 let, mládež pro hry od 12 let a výš a děti pro ostatní. Hry seřaďte podle věkové hranice od nejvyšší, hry se stejnou hranicí podle názvu:
| nazev | vek_od | publikum |
|---|---|---|
| Zombie Town | 18 | dospělí |
| Dragon Forge | 16 | mládež |
| Knight's Oath | 16 | mládež |
| Robot Rebellion | 16 | mládež |
| Shadow Ninja | 16 | mládež |
| Castle Siege | 12 | mládež |
| … | … | … |
Pod tím ukažte recenze her 1 a 2: hra_id, zakaznik_id, hvězdičky a hodnoceni: kladné pro 4 nebo 5 hvězdiček, neutrální pro 3 a záporné pro méně. Recenze seřaďte podle hra_id a pak podle zakaznik_id:
| hra_id | zakaznik_id | hvezdicky | hodnoceni |
|---|---|---|---|
| 1 | 1 | 4 | kladné |
| 1 | 2 | 5 | kladné |
| 1 | 5 | 3 | neutrální |
| 1 | 8 | 5 | kladné |
| 2 | 5 | 4 | kladné |
| 2 | 6 | 2 | záporné |
Začněte programovat zdarma
5/10