مرکزی مواد پر جائیں
ماڈیول 4 · سبق 3 از 4کورس میں 15/57~10 min
ماڈیول اسباق (3/4)

مشروط منطق: CASE WHEN

ہم نے اب تک جو کچھ دیکھا ہے وہ ڈیٹا کو ویسے ہی نکالتا ہے۔ اکثر، اگرچہ، آپ چاہتے ہیں اسے تبدیل کرنے کے لیے: تنخواہوں کو درجوں میں درجہ بندی کریں، نئی ملازمتوں کو بطور نشان زد کریں۔ "جونیئر"، عددی کوڈ کو پڑھنے کے قابل لیبل میں ترجمہ کریں۔ ایس کیو ایل کا معیار اس کے لیے ٹول کو CASE WHEN کہا جاتا ہے۔

نحو: ایک منی اگر/اور

SQL
CASE
  WHEN condition_1 THEN value_1
  WHEN condition_2 THEN value_2
  ...
  ELSE default_value
END

یہ کسی بھی زبان میں بالکل if/else if/else کی طرح پڑھتا ہے: SQL اندازہ کرتا ہے۔ حالات ترتیب میں اور پہلے صحیح پر رک جاتے ہیں، واپس کرتے ہوئے متعلقہ value۔ اگر کوئی بھی درست نہیں ہے تو یہ ELSE قدر لوٹاتا ہے۔ اگر آپ ELSE کو چھوڑ دیں اور کوئی برانچ مماثل نہیں ہے، یہ NULL لوٹاتا ہے۔

SQL
-- Classify employees by salary tier:
SELECT first_name,
       last_name,
       salary,
       CASE
         WHEN salary >= 50000 THEN 'Senior'
         WHEN salary >= 35000 THEN 'Mid'
         ELSE                       'Junior'
       END AS tier
FROM   employees;

CASE ** SELECT** کے اندر رہتا ہے: یہ کسی بھی طرح ایک کالم تیار کرتا ہے فنکشن، اور اسے AS کے ساتھ ایک عرف دینا بالکل معمول کی بات ہے (یہاں tier)۔

CASE کہاں استعمال کرنا ہے۔

تین بار بار آنے والے مقامات:

  1. ** SELECT** میں مشتق کالم بنانے کے لیے (اوپر کی مثال)۔
  2. ** "اپنی مرضی کے مطابق" ترتیب کے لیے ORDER BY** میں:
    SQL
    ORDER BY CASE department_id WHEN 1 THEN 0 ELSE 1 END, last_name;
    -- Engineering first, then the rest, alphabetically by last name.
  3. مجموعی افعال کے اندر "مشروط طور پر شمار" کرنے کے لیے:
    SQL
    SELECT
      COUNT(*) AS total,
      SUM(CASE WHEN salary >= 50000 THEN 1 ELSE 0 END) AS senior,
      SUM(CASE WHEN salary <  35000 THEN 1 ELSE 0 END) AS junior
    FROM employees;
    یہ پیٹرن — SUM(CASE WHEN … THEN 1 ELSE 0 END) — سب سے عام ہے۔ ڈیش بورڈز میں استعمال ہونے والی "مشروط گنتی"۔

"کومپیکٹ" فارم

جب آپ ایک ہی اظہار کا موازنہ کرتے ہیں تو ایک چھوٹی قسم بھی ہوتی ہے۔ صحیح اقدار کے خلاف:

SQL
CASE department_id
  WHEN 1 THEN 'Ingegneria'
  WHEN 2 THEN 'Vendite'
  ELSE       'Altro'
END

یہ CASE WHEN department_id = 1 THEN ... WHEN department_id = 2 THEN ... END کے مساوی ہے، بس زیادہ کمپیکٹ۔ یہ صرف بالکل برابری کے لیے کام کرتا ہے: اگر آپ کو >= یا کسی اور موازنہ کی ضرورت ہے، آپ کو توسیع شدہ پر واپس جانا ہوگا فارم

اسے آزمائیں

ورزش#sql.m4.l3.e1
کوششیں: 0لوڈ ہو رہا ہے…

ہر ملازم کے لیے پہلا نام (پہلا_نام)، آخری نام (آخری_نام) اور ایک 'ٹیر' کالم دکھائیں جو 'آلٹو' ہو اگر تنخواہ کم از کم 50000 ہے، بصورت دیگر 'معیاری'۔ تین کالم، ایک قطار فی ملازم۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

شرط ہے تنخواہ >= 50000۔ END کے ساتھ CASE بند کرنا اور عرف 'tier' استعمال کرنا یاد رکھیں۔

3 کوششوں کے بعد حل دستیاب ہے۔

ورزش کا جائزہ لیں۔

ورزش#sql.m4.l3.e2
کوششیں: 0لوڈ ہو رہا ہے…

ہر شعبہ (department_id) کے لیے، شمار کریں کہ کتنے ملازمین کی تنخواہ زیادہ ہے (>= 50000) اور کتنے معیاری (< 50000) SUM(CASE...) کا استعمال کرتے ہوئے ہیں۔ تین کالم: Department_id، اعلی، معیاری۔ بذریعہ Department_id آرڈر (NULLS LAST)۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

SUM(CASE WHEN... THEN 1 ELSE 0 END) پیٹرن مشروط شمار ہے۔

3 کوششوں کے بعد حل دستیاب ہے۔