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

  1. Pořadí podmínek volte rozumně — Nejpravděpodobnější podmínky dejte na začátek
  2. Vyhněte se zbytečným vyhodnocením — CASE se vyhodnocuje sekvenčně; jakmile se podmínka splní, vyhodnocování se zastaví
  3. Indexujte vhodné sloupce — Pokud CASE používá porovnání sloupců, indexy mohou pomoci
  4. Zvažte vypočítávané sloupce — Pro často používanou logiku CASE některé databáze podporují indexované vypočítávané sloupce

Shrnutí

  • CASE př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!