Ce face CASE
CASE verifică pe rând condițiile din WHEN și returnează rezultatul primei condiții adevărate. Dacă nicio condiție nu este adevărată, returnează valoarea din ELSE (sau NULL, dacă lipsește ELSE).
Îl poți folosi în SELECT, ORDER BY, UPDATE și în funcții de grup, de exemplu ca să numeri separat mai multe categorii. Pentru o singură condiție, MySQL are și funcția mai scurtă IF(conditie, da, nu).
Exemple
Exemplele de pe această pagină pornesc de la datele de mai jos. Rulează mai întâi acest cod, apoi exemplul.
CREATE TABLE produse (
id INT PRIMARY KEY,
nume VARCHAR(50) NOT NULL,
categorie VARCHAR(30),
pret INT,
stoc INT
);
INSERT INTO produse VALUES
(1, 'Laptop', 'Electronice', 3500, 4),
(2, 'Mouse', 'Electronice', 80, 25),
(3, 'Birou', 'Mobilier', 900, 0),
(4, 'Scaun', 'Mobilier', 650, 7),
(5, 'Monitor', 'Electronice', 1200, 3);
Exemplul 1: Starea stocului ca text
SELECT nume, stoc,
CASE
WHEN stoc = 0 THEN 'epuizat'
WHEN stoc < 5 THEN 'stoc limitat'
ELSE 'în stoc'
END AS stare
FROM produse;
Rezultat
+---------+------+--------------+
| nume | stoc | stare |
+---------+------+--------------+
| Laptop | 4 | stoc limitat |
| Mouse | 25 | în stoc |
| Birou | 0 | epuizat |
| Scaun | 7 | în stoc |
| Monitor | 3 | stoc limitat |
+---------+------+--------------+
Exemplul 2: Numărare pe intervale de preț
SELECT
SUM(CASE WHEN pret < 1000 THEN 1 ELSE 0 END) AS sub_1000,
SUM(CASE WHEN pret >= 1000 THEN 1 ELSE 0 END) AS peste_1000
FROM produse;
Rezultat
+----------+------------+
| sub_1000 | peste_1000 |
+----------+------------+
| 3 | 2 |
+----------+------------+
Greșeli frecvente
- Uiți
ENDde la final și primești eroare de sintaxă. - Pui condițiile în ordine greșită: dacă
WHEN stoc < 5vine înaintea luiWHEN stoc = 0, produsele epuizate apar ca „stoc limitat”.
Comenzi înrudite
COALESCE / IFNULL: Înlocuiește NULL cu o valoare implicită: returnează prima valoare care nu este NULL.SUM: Adună valorile dintr-o coloană numerică.UPDATE: Modifică valorile din rândurile existente ale unui tabel.