Příkaz SQL CASE: Podmíněná logika ve vašich dotazech
Published: 2026-02-11
Příkaz CASE je způsob, jak v SQL přidat do dotazů podmíněnou logiku. Funguje jako konstrukce if-then-else a umožňuje vracet různé hodnoty podle splněných podmínek. CASE je podporován ve všech hlavních SQL databázích včetně SQLite, PostgreSQL, MySQL, SQL Serveru a Oracle.
Ukázková data
Ve všech příkladech používáme dvě tabulky:
Tabulka products:
| id | name | category | price | stock | rating |
|---|---|---|---|---|---|
| 1 | Laptop Pro | Electronics | 1299.99 | 15 | 4.5 |
| 2 | Wireless Mouse | Electronics | 29.99 | 50 | 4.2 |
| 3 | Office Chair | Furniture | 249.99 | 8 | 4.7 |
| 4 | Desk Lamp | Furniture | 39.99 | 25 | 3.9 |
| 5 | Notebook Pack | Stationery | 12.99 | 100 | 4.0 |
| 6 | Pen Set | Stationery | 8.99 | 75 | 3.5 |
| 7 | Monitor 27" | Electronics | 399.99 | 0 | 4.6 |
| 8 | Standing Desk | Furniture | 599.99 | 3 | 4.8 |
Tabulka orders:
| id | product_id | quantity | order_date | status |
|---|---|---|---|---|
| 1 | 1 | 2 | 2026-02-01 | delivered |
| 2 | 2 | 5 | 2026-02-03 | shipped |
| 3 | 3 | 1 | 2026-02-05 | processing |
| 4 | 4 | 3 | 2026-02-06 | delivered |
| 5 | 5 | 10 | 2026-02-07 | shipped |
| 6 | 1 | 1 | 2026-02-08 | cancelled |
| 7 | 7 | 1 | 2026-02-09 | pending |
| 8 | 8 | 1 | 2026-02-10 | processing |
Jednoduchý výraz CASE (Simple CASE)
Jednoduchý výraz CASE porovnává sloupec nebo výraz s konkrétními hodnotami. Je stručný, když kontrolujete rovnost.
Syntaxe
CASE column_name
WHEN value1 THEN result1
WHEN value2 THEN result2
ELSE default_result
END
Příklad: Kategorizace stavu objednávky
Převod kódů stavu objednávky na uživatelsky přívětivé popisky:
Vyhledávací výraz CASE (Searched CASE)
Vyhledávací výraz CASE vyhodnocuje logické (boolean) podmínky a umožňuje složitější porovnání a rozsahy.
Syntaxe
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
ELSE default_result
END
Příklad: Cenové kategorie
Klasifikace produktů podle cenového rozpětí:
Příklad: Stav dostupnosti skladu
Určení stavu zásob podle různých prahových hodnot:
Použití CASE ve výpočtech
Příkazy CASE mohou upravovat výpočty, aplikovat podmíněné vzorce nebo ošetřovat hodnoty NULL.
Příklad: Slevy podle kategorie
Výpočet slev na základě kategorie produktu:
Příklad: Priorita objednávek podle hodnoty a stavu
Výpočet priority objednávky na základě více faktorů:
CASE v agregacích
CASE můžete použít uvnitř agregačních funkcí k vytváření přehledů podobných kontingenčním tabulkám nebo podmíněným počtům.
Příklad: Počet produktů podle dostupnosti
Spočítejte, kolik produktů spadá do jednotlivých kategorií zásob:
Příklad: Tržby podle kategorie a stavu
Výpočet různých metrik pomocí podmíněné agregace:
CASE v ORDER BY
CASE v klauzuli ORDER BY použijte pro vlastní logiku řazení.
Příklad: Vlastní pořadí řazení
Seřaďte produkty s vlastní prioritou (nejprve vyprodané, pak podle hodnocení):
Vnořené příkazy CASE
Výrazy CASE lze vnořovat pro složitější logiku.
Příklad: Komplexní klasifikace produktů
Kombinace více kritérií pro detailní kategorizaci:
Běžné použití příkazů CASE
- Kategorizace dat — Seskupování hodnot do rozsahů nebo kategorií
- Podmíněné formátování — Zobrazení uživatelsky přívětivých popisků nebo indikátorů stavu
- Dynamické výpočty — Použití různých vzorců podle podmínek
- Tvorba kontingenčních tabulek — V kombinaci s agregacemi pro křížové přehledy
- Vlastní řazení — Definice specifického pořadí pro obchodní logiku
- Ošetření hodnot NULL — Nahrazení nebo označení chybějících dat
- Rozhodování podle více kritérií — Implementace složitých obchodních pravidel v SQL
CASE vs. IIF a COALESCE
- CASE — Nejpřizpůsobivější, zvládá více podmínek
- IIF(condition, true_value, false_value) — Jednodušší syntaxe pro jednu podmínku (SQL Server, Access)
- COALESCE(val1, val2, …) — Vrátí první nenulovou (non-NULL) hodnotu (vhodné pro práci s NULL)
SQLite podporuje CASE i COALESCE, ale ne IIF. Pro maximální kompatibilitu používejte CASE.
Tipy k výkonu
- Pořadí podmínek volte rozumně — Nejpravděpodobnější podmínky dejte na začátek
- Vyhněte se zbytečným vyhodnocením — CASE se vyhodnocuje sekvenčně; jakmile se podmínka splní, vyhodnocování se zastaví
- Indexujte vhodné sloupce — Pokud CASE používá porovnání sloupců, indexy mohou pomoci
- Zvažte vypočítávané sloupce — Pro často používanou logiku CASE některé databáze podporují indexované vypočítávané sloupce
Shrnutí
CASEpřidává do SQL dotazů podmíněnou logiku s chováním if-then-else- Jednoduchý CASE porovnává sloupec s konkrétními hodnotami:
CASE column WHEN value THEN result - Vyhledávací CASE vyhodnocuje logické podmínky:
CASE WHEN condition THEN result - Lze jej použít v SELECT, WHERE, ORDER BY i v agregačních funkcích
- Výrazy CASE lze vnořovat pro složité rozhodovací stromy
- Vždy zahrňte klauzuli ELSE pro ošetření neočekávaných hodnot
- Podporován ve všech hlavních SQL databázích s konzistentní syntaxí
Zkuste si upravit příklady, experimentujte s různými podmínkami a uvidíte, jak vám CASE může zjednodušit podmíněnou logiku!