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

  1. Poradie podmienok voľte rozumne — Najpravdepodobnejšie podmienky dajte na začiatok
  2. Vyhnite sa zbytočným vyhodnoteniam — CASE sa vyhodnocuje postupne; po prvej zhode sa zastaví
  3. Indexujte vhodné stĺpce — Ak CASE používa porovnania stĺpcov, indexy môžu pomôcť
  4. Zvážte vypočítavané stĺpce — Pre často používanú CASE logiku niektoré databázy podporujú indexované vypočítavané stĺpce

Zhrnutie

  • CASE pridá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!