61 / 100

CASE

Shartli CASE ifodasi

Kirish: Ushbu qo'llanmada siz PostgreSQL CASE ifodasi yordamida SQL so'rovlarida shartli mantiqni (if-else kabi) amalga oshirishni o'rganasiz.

PostgreSQL CASE ifodasiga kirish

PostgreSQLda CASE ifodasi dasturlash tillaridagi if-else yoki switch-case operatorlariga o'xshash kuchli vosita bo'lib, so'rov ichida turli shartlar asosida har xil natijalarni qaytarish imkonini beradi.

CASE ifodasining umumiy sintaksisi:

query.sql
CASE  
   WHEN condition1 THEN result1
   WHEN condition2 THEN result2
   WHEN condition3 THEN result3
   ...
   ELSE result
END

Ushbu sintaksisda:

  • Har bir condition — bu mantiqiy ifoda (true yoki false). PostgreSQL shartlarni yuqoridan pastga qarab ketma-ket tekshiradi.
  • Birinchi true bo'lgan shartning THEN qismidagi natija qaytariladi va keyingi shartlar tekshirilmaydi.
  • Agar birorta ham shart true bo'lmasa, ELSE qismidagi natija qaytariladi. Agar ELSE ko'rsatilmagan bo'lsa, NULL qaytadi.

CASE ifodasini SELECT, WHERE, ORDER BY va GROUP BY kabi ifoda ishlatish mumkin bo'lgan har qanday joyda qo'llash mumkin.

PostgreSQL CASE ifodasiga misol

Har bir tovarning ombordagi umumiy sonini va unga mos zaxira darajasini (Low, Medium, High) aniqlaymiz:

query.sql
SELECT
  product_name,
  SUM(quantity) AS total_quantity,
  CASE
    WHEN SUM(quantity) <= 120 THEN 'Low'
    WHEN SUM(quantity) > 120 AND SUM(quantity) <= 150 THEN 'Medium'
    WHEN SUM(quantity) > 150 THEN 'High'
  END AS inventory_level
FROM
  inventories
  JOIN products USING (product_id)
GROUP BY
  product_name
ORDER BY
  total_quantity;

Natija:

matn
        product_name        | total_quantity | inventory_level
----------------------------+----------------+-----------------
 Samsung Galaxy Z Fold 5    |            110 | Low
 Xiaomi Mi 14               |            120 | Low
 Sony Xperia 1 VI           |            130 | Medium
 Apple iPhone 15 Pro Max    |            140 | Medium
 Apple iPhone 15            |            150 | Medium
 Samsung Galaxy Tab S9      |            160 | High
 Apple iPad Pro 12.9        |            170 | High
 Apple AirPods Pro 3        |            180 | High
 Samsung Galaxy Buds Pro 2  |            190 | High

Mantiq:

  • Jami soni 120 dan kam yoki teng bo'lsa: 'Low' (kam).
  • 120 dan ko'p va 150 dan kam yoki teng bo'lsa: 'Medium' (o'rtacha).
  • 150 dan ortiq bo'lsa: 'High' (ko'p).

Oddiy CASE ifodasi (Simple CASE)

Agar bitta aniq ustun yoki ifoda qiymatlarini solishtirmoqchi bo'lsangiz, qisqartirilgan oddiy CASE sintaksisidan foydalanishingiz mumkin:

query.sql
CASE expression
  WHEN value1 THEN result1
  WHEN value2 THEN result2
  WHEN value3 THEN result3
  ...
  ELSE result
END

Masalan, tranzaksiya turini yanada tushunarli matnga aylantirish:

query.sql
SELECT
  transaction_id,
  type,
  CASE type
    WHEN 'issue' THEN 'Tovarni chiqarish'
    WHEN 'receipt' THEN 'Tovarni qabul qilish'
    ELSE 'Boshqa'
  END AS transaction_type
FROM
  transactions;

Natija:

matn
 transaction_id |  type   |   transaction_type
----------------+---------+----------------------
              1 | issue   | Tovarni chiqarish
              2 | issue   | Tovarni chiqarish
              3 | issue   | Tovarni chiqarish
              4 | receipt | Tovarni qabul qilish
              5 | receipt | Tovarni qabul qilish

Xulosa

  • SQL so'rovlariga shartli mantiq kiritish uchun CASE ifodasidan foydalaning.
  • Erkin shartlar uchun umumiy CASE WHEN ... THEN ... END, bitta ustun qiymatini taqqoslash uchun esa oddiy CASE expression WHEN value THEN ... END sintaksisi ishlatiladi.
  • Mos keluvchi holat topilmasa va ELSE berilmagan bo'lsa, CASE ifodasi NULL qaytaradi.