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;
nazevcenakategorie
Dragon Forge999drahá
Pixel Racer399levná
Moon Farm499běžná
Castle Siege799běž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;
idstavpoznamka
6zaplacenov pořádku
7vracenopeníze vráceny
8zaplacenov 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.

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:

nazevvek_odpublikum
Zombie Town18dospělí
Dragon Forge16mládež
Knight's Oath16mládež
Robot Rebellion16mládež
Shadow Ninja16mládež
Castle Siege12mlá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_idzakaznik_idhvezdickyhodnoceni
114kladné
125kladné
153neutrální
185kladné
254kladné
262záporné

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