মূল কন্টেন্টে যান
মডিউল 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...) ব্যবহার করে। তিনটি কলাম: বিভাগ_আইডি, উচ্চ, মানক। ডিপার্টমেন্ট_আইডি (NULLS LAST) দ্বারা অর্ডার করুন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

SUM(CASE WHEN... THEN 1 ELSE 0 END) প্যাটার্ন হল শর্তসাপেক্ষ গণনা।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ