Ko'pincha bizga shunday natija kerak bo'ladi: har bir qatorga uning qiymatiga qarab boshqacha javob qaytarsak. Masalan, mahsulot narxiga qarab uni "qimmat", "o'rta" yoki "arzon" deb belgilamoqchimiz.
Python dan if / elif / else ni eslang:
if narx >= 1000000:
toifa = "qimmat"
elif narx >= 100000:
toifa = "orta"
else:
toifa = "arzon"SQL da ham aynan shunday mantiq bor. U CASE WHEN ... THEN ... ELSE ... END ifodasi deb ataladi.
CASE ifodasi har bir qator uchun yuqoridan pastga qarab shartlarni tekshiradi va birinchi to'g'ri kelgan WHEN ning THEN qiymatini qaytaradi. Hech bir shart to'g'ri kelmasa, ELSE qiymati qaytadi:
SELECT nomi,
CASE
WHEN narx >= 1000000 THEN 'qimmat'
WHEN narx >= 100000 THEN 'orta'
ELSE 'arzon'
END
FROM mahsulotlar;Bu yerda:
CASE — ifoda boshlanishi.WHEN shart THEN qiymat — agar shart to'g'ri bo'lsa, qiymat ni qaytaradi.ELSE qiymat — hech bir shart bajarilmasa, shu qiymat qaytadi.END — ifoda tugashi (uni unutmaslik kerak!).Eslatma:
CASEshartlar tartibi muhim. SQL ularni yuqoridan pastga tekshiradi va birinchi to'g'ri kelganida to'xtaydi. Shu sababli avval kattaroq shart (>= 1000000), keyin kichikrog'i (>= 100000) yoziladi. Aks holda hamma katta sonlar ham'orta'ga tushib qolardi.
mahsulotlar jadvalimizda quyidagi ma'lumotlar bor:
| id | nomi | kategoriya | narx | ombor |
|---|---|---|---|---|
| 1 | Telefon | Elektronika | 5000000 | 10 |
| 2 | Noutbuk | Elektronika | 12000000 | 5 |
| 3 | Quloqchin | Elektronika | 300000 | 50 |
| 4 | Kitob | Kitoblar | 50000 | 100 |
| 5 | Daftar | Kanstovar | 8000 | 200 |
| 6 | Ruchka | Kanstovar | 3000 | 500 |
| 7 | Stol | Mebel | 800000 | 15 |
| 8 | Stul | Mebel | 250000 | 40 |
Quyidagi so'rov har bir mahsulotning nomi yonida uning narx toifasini chiqaradi:
SELECT nomi,
CASE
WHEN narx >= 1000000 THEN 'qimmat'
WHEN narx >= 100000 THEN 'orta'
ELSE 'arzon'
END
FROM mahsulotlar
ORDER BY id;Natija:
Telefon|qimmat
Noutbuk|qimmat
Quloqchin|orta
Kitob|arzon
Daftar|arzon
Ruchka|arzon
Stol|orta
Stul|ortaE'tibor bering: Telefon (5000000) va Noutbuk (12000000) — ikkalasi ham >= 1000000 shartiga tushadi, shuning uchun qimmat. Quloqchin (300000) va Stol (800000) esa birinchi shartdan o'tmaydi, lekin >= 100000 shartiga tushadi — orta. Qolganlari (Kitob, Daftar, Ruchka) arzon.
Muhim: SQLite da
IIF()funksiyasi yo'q. Shartli qiymat berish uchun har doimCASE WHEN ... THEN ... ELSE ... ENDdan foydalaning.
mahsulotlar jadvalidagi har bir mahsulotga narxiga qarab toifa bering: 1000000 va undan qimmati — 'qimmat', 100000 va undan qimmati — 'orta', qolganlari — 'arzon'. Mahsulotning nomi ni va toifani id tartibida chiqaring. CASE WHEN dan foydalaning.