Príkaz SQL CASE: Podmienená logika vo vašich dopytoch
Published: 2026-02-11
Príkaz CASE je spôsob, akým SQL pridáva do dopytov podmienenú logiku. Funguje ako if-then-else, takže môžete vracať rôzne hodnoty podľa splnených podmienok. CASE podporujú všetky hlavné SQL databázy vrátane SQLite, PostgreSQL, MySQL, SQL Server a Oracle.
Vzorové dáta
Vo všetkých príkladoch používame dve tabuľky:
Tabuľka 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 |
Tabuľka 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 Expression)
Jednoduchý výraz CASE porovnáva stĺpec alebo výraz s konkrétnymi hodnotami. Je stručný, keď kontrolujete rovnosť.
Syntax
CASE column_name
WHEN value1 THEN result1
WHEN value2 THEN result2
ELSE default_result
END
Príklad: Kategorizácia stavu objednávky
Preložte kódy stavu objednávky na používateľsky prívetivé označenia:
Vyhľadávací výraz CASE (Searched CASE Expression)
Vyhľadávací výraz CASE vyhodnocuje booleovské podmienky, takže umožňuje zložitejšie porovnania a rozsahy.
Syntax
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
ELSE default_result
END
Príklad: Cenové kategórie
Zaraďte produkty do cenových pásiem:
Príklad: Stav dostupnosti skladu
Určite stav zásob podľa rôznych prahov:
Použitie CASE vo výpočtoch
Príkazy CASE môžu upravovať výpočty, aplikovať podmienené vzorce alebo ošetrovať hodnoty NULL.
Príklad: Zľavy podľa kategórie
Vypočítajte zľavy na základe kategórie produktu:
Príklad: Priorita objednávok podľa hodnoty a stavu
Vypočítajte prioritu objednávky na základe viacerých faktorov:
CASE v agregáciách
CASE môžete použiť vo vnútri agregačných funkcií na tvorbu reportov podobných kontingenčným tabuľkám alebo podmieneným počtom.
Príklad: Počet produktov podľa dostupnosti
Spočítajte, koľko produktov je v každej kategórii zásob:
Príklad: Tržby podľa kategórie a stavu
Vypočítajte rôzne metriky pomocou podmienenej agregácie:
CASE v ORDER BY
CASE v klauzule ORDER BY použite na vytvorenie vlastnej logiky triedenia.
Príklad: Vlastné poradie triedenia
Zoradťe produkty s vlastnou prioritou (najprv vypredané, potom podľa hodnotenia):
Vnorené príkazy CASE
Výrazy CASE je možné vnoriť pre zložitejšiu logiku.
Príklad: Komplexná klasifikácia produktov
Skombinujte viacero kritérií pre podrobnejšiu kategorizáciu:
Bežné použitia príkazov CASE
- Kategorizácia dát — Zoskupovanie hodnôt do rozsahov alebo kategórií
- Podmienené formátovanie — Zobrazenie používateľsky prívetivých štítkov alebo indikátorov stavu
- Dynamické výpočty — Použitie rôznych vzorcov podľa podmienok
- Tvorba kontingenčných tabuliek — V kombinácii s agregáciami pre crosstab reporty
- Vlastné triedenie — Definovanie špecifického poradia pre biznis logiku
- Ošetrovanie hodnôt NULL — Nahradenie alebo označenie chýbajúcich dát
- Rozhodovanie podľa viacerých kritérií — Implementácia zložitých biznis pravidiel v SQL
CASE vs. IIF a COALESCE
- CASE — Najflexibilnejší, zvláda viacero podmienok
- IIF(condition, true_value, false_value) — Jednoduchšia syntax pre jednu podmienku (SQL Server, Access)
- COALESCE(val1, val2, …) — Vráti prvú nenulovú hodnotu (vhodné na prácu s NULL)
SQLite podporuje CASE aj COALESCE, ale nie IIF. CASE používajte pre maximálnu kompatibilitu.
Tipy k výkonu
- Poradie podmienok voľte rozumne — Najpravdepodobnejšie podmienky dajte na začiatok
- Vyhnite sa zbytočným vyhodnoteniam — CASE sa vyhodnocuje postupne; po prvej zhode sa zastaví
- Indexujte vhodné stĺpce — Ak CASE používa porovnania stĺpcov, indexy môžu pomôcť
- Zvážte vypočítavané stĺpce — Pre často používanú CASE logiku niektoré databázy podporujú indexované vypočítavané stĺpce
Zhrnutie
CASEpridáva do SQL dopytov podmienenú logiku s if-then-else správaním- Jednoduchý CASE porovnáva stĺpec s konkrétnymi hodnotami:
CASE column WHEN value THEN result - Vyhľadávací CASE vyhodnocuje booleovské podmienky:
CASE WHEN condition THEN result - Dá sa použiť v SELECT, WHERE, ORDER BY aj v agregačných funkciách
- Výrazy CASE je možné vnoriť pre zložité rozhodovacie stromy
- Vždy zahrňte klauzulu ELSE na ošetrenie neočakávaných hodnôt
- Podporujú ho všetky hlavné SQL databázy s konzistentnou syntaxou
Skúste upraviť príklady, experimentujte s rôznymi podmienkami a uvidíte, ako vám CASE môže zjednodušiť podmienenú logiku!