SQL — Case

Zpět na blog

SQL — Case

sql case between podmínky

Potřebujete použít SQL příkaz CASE a nejste si úplně jistí, jak funguje?

Jednoduše se dá vysvětlit jako IF-THEN-ELSE pro SQL. Umožňuje vyhodnocovat podmínky a podle výsledku se rozhodnout, co dál.

Základní syntaxe CASE není složitá.

Vyzkoušejte si SQL

Všechny příklady z tohoto návodu si můžete vyzkoušet on-line. Pro naše účely bohatě postačí on-line nástroj SQL Fiddle.

Další možností je mít SQL na vašem lokálním PC. Pokud chcete používat SQL bez složité instalace, doporučujeme přehledný návod krok za krokem SQLite - snadný způsob jak začít s SQL.

Vytvořte si tabulku

Zkopírujte následující kód a spusťte ho. Vytvoří se tabulka s testovacími daty.

CREATE TABLE kurzy
( 
    id INT, 
    nazev VARCHAR(50), 
    cena  DECIMAL(7,2),
    v_prodeji BOOLEAN,
    prodano_licenci INT  
); 


INSERT INTO kurzy VALUES (1, 'SQL základy', 3900, 1, 120);
INSERT INTO kurzy VALUES (2, 'Python úvod', 4100, 1, 140);
INSERT INTO kurzy VALUES (3, 'Excel KT', 3100, 1, 330);
INSERT INTO kurzy VALUES (4, 'Power BI', 3900, 1, 210);
INSERT INTO kurzy VALUES (5, 'Tableau', 4300, 1, 190);
INSERT INTO kurzy VALUES (6, 'Android', 3100, 1, 40);
INSERT INTO kurzy VALUES (7, 'RPA', 3100, 1, 50);
INSERT INTO kurzy VALUES (8, 'Strojové učení', 4800, 1, 30);
INSERT INTO kurzy VALUES (9, 'Základy jógy', 2900, 0, 0);

Začínáme

Nejlépe si vyzkoušíte použití CASE podmínky na příkladech.

Váš kolega chce vědět, jaké kurzy jsou aktuálně v prodeji. Pokud kurz není v prodeji, označíte ho Nelze zakoupit, v opačném případě jako Lze zakoupit.

Tento příklad ukazuje nejednoduší syntaxi CASE.

SELECT nazev, v_prodeji,
    CASE v_prodeji
        WHEN 0 
        THEN 'Nelze zakoupit'
        ELSE 'Lze zakoupit'
    END AS "V prodeji"
  FROM kurzy
;
nazev             v_prodeji  V prodeji
--------------  -----------  --------------
SQL základy               1  Lze zakoupit
Python úvod               1  Lze zakoupit
Excel KT                  1  Lze zakoupit
Power BI                  1  Lze zakoupit
Tableau                   1  Lze zakoupit
Android                   1  Lze zakoupit
RPA                       1  Lze zakoupit
Strojové učení            1  Lze zakoupit
Základy jógy              0  Nelze zakoupit

Porovnání ceny

Pokud kurz stojí méně než 3500 Kč, označíte ho jako Do 3500 Kč, pokud více, tak jako Nad 3500 Kč. Nakonec kurzy seřadíte podle relativní ceny a názvu.

Všimněte si drobné změny v syntaxi, kdy cenu porovnáváte hned za klíčovým slovem WHEN.

SELECT nazev, cena,
    CASE WHEN cena < 3500
        THEN 'Do 3500 Kč'
        ELSE 'Nad 3500 Kč'
    END AS "Relativní cena"
  FROM kurzy
  ORDER BY "Relativní cena",
    nazev
;
nazev             cena  Relativní cena
--------------  ------  ----------------
Android           3100  Do 3500 Kč
Excel KT          3100  Do 3500 Kč
RPA               3100  Do 3500 Kč
Základy jógy      2900  Do 3500 Kč
Power BI          3900  Nad 3500 Kč
Python úvod       4100  Nad 3500 Kč
SQL základy       3900  Nad 3500 Kč
Strojové učení    4800  Nad 3500 Kč
Tableau           4300  Nad 3500 Kč

Kombinace podmínek

Obě výše uvedené podmínky můžete zkombinovat do jednoho SQL příkazu a získat tak všechny informace najednou. Díky tomu nemusíte psát víc příkazů pod sebe.

SELECT nazev,
    CASE v_prodeji
        WHEN 0 
        THEN 'Nelze zakoupit'
        ELSE 'Lze zakoupit'
    END AS "V prodeji",
    CASE WHEN cena < 3500
        THEN 'Do 3500 Kč'
        ELSE 'Nad 3500 Kč'
    END AS "Relativní cena"
  FROM kurzy
;
nazev           V prodeji       Relativní cena
--------------  --------------  ----------------
SQL základy     Lze zakoupit    Nad 3500 Kč
Python úvod     Lze zakoupit    Nad 3500 Kč
Excel KT        Lze zakoupit    Do 3500 Kč
Power BI        Lze zakoupit    Nad 3500 Kč
Tableau         Lze zakoupit    Nad 3500 Kč
Android         Lze zakoupit    Do 3500 Kč
RPA             Lze zakoupit    Do 3500 Kč
Strojové učení  Lze zakoupit    Nad 3500 Kč
Základy jógy    Nelze zakoupit  Do 3500 Kč

Složitější podmínky

Praxe samozřejmě přináší komplikovanější případy, kdy s jednoduchými podmínkami nevystačíte. Naštěstí je SQL CASE dobře připraveno i na tyto výzvy.

Kolegyně chce přehledně zobrazit prodejnost kurzů. Pokud se jich prodalo více než 200, zobrazíme hvězdičky. Pokud byl prodej více než 100, dostanou palce nahoru. Méně než 100 znamená obličej bez výrazu. Všechno ostatní je propadák.

SELECT nazev, prodano_licenci,
    CASE
        WHEN prodano_licenci > 200 THEN '⭐️⭐️⭐️'
        WHEN prodano_licenci > 100 THEN '👍👍'
        WHEN prodano_licenci BETWEEN 1 AND 100 THEN '😐'
        ELSE '💣'
    END AS "Prodejnost"
FROM kurzy
ORDER BY prodano_licenci DESC
;
nazev           prodano_licenci  Prodejnost
-------------   ---------------  ----------
Excel KT        330              ⭐️⭐️⭐️
Power BI        210              ⭐️⭐️⭐️
Tableau         190              👍👍
Python úvod     140              👍👍
SQL základy     120              👍👍
RPA             50               😐
Android         40               😐
Strojové učení  30               😐
Základy jógy     0               💣

Další kroky

Pokud se chcete naučit využívat SQL, doporučujeme absolvování kurzu SQL pro analytiky, který vám dá potřebné základy. Pokud složíte závěrečný test, obdržíte certifikát, kterým se pak můžete pochlubit třeba v práci.


Líbil se vám článek? Sdílejte ho s ostatními

nebo nám napište něco hezkého. Děkujeme!

Zpět na blog

Pandas - analýza a zpracování dat

Naučte se základy Pandas - pythonovské knihovny, která je standardem pro analýzu a zpracování dat.

Zobrazit kurz

Individuální kariérní konzultace - 2h

Jak mít úspěšnou kariéru v datech a dostat se na 800 Kč/hodinu

Zobrazit kurz

Úvod do řízení projektů

Naučte se základům projektového managementu a pronikněte do tajů řízení projektů.

Zobrazit kurz

Hledáme další autory

Publikujte na Lovely Blogu a inspirujte ostatní! Sdílením svých znalosti si budujete osobní značku.

Kontaktujte nás

Odběr novinek

Novinky, návody a tipy přímo do vašeho emailu.

Návody, tipy a slevy přímo do vašeho emailu.

Copyright © 2018-2022, Colorbee, s.r.o.

Design by grafikli.cz