মডিউল পাঠ (3/4)
শর্তযুক্ত যুক্তি: CASE WHEN
আমরা এখন পর্যন্ত যা দেখেছি তার সবকিছুই যেমন-ই ডেটা বের করে। প্রায়ই, যদিও, আপনি চান
এটিকে রূপান্তর করতে: বেতনগুলিকে স্তরগুলিতে শ্রেণীবদ্ধ করুন, নতুন নিয়োগকে হিসাবে চিহ্নিত করুন৷
"জুনিয়র", একটি পঠনযোগ্য লেবেলে একটি সংখ্যাসূচক কোড অনুবাদ করুন। এসকিউএল এর স্ট্যান্ডার্ড
এর জন্য টুলকে CASE WHEN_ বলা হয়।
সিনট্যাক্স: একটি মিনি যদি/অন্যথায়
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 প্রদান করে।
-- 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 ব্যবহার করবেন
তিনটি পুনরাবৃত্ত স্থান:
- এ
SELECT_ থেকে উদ্ভূত কলাম তৈরি করতে (উপরের উদাহরণ)। - ** "কাস্টম" বাছাইয়ের জন্য
ORDER BY** এ:SQLORDER BY CASE department_id WHEN 1 THEN 0 ELSE 1 END, last_name; -- Engineering first, then the rest, alphabetically by last name. - অভ্যন্তরে সমষ্টিগত ফাংশন "শর্তসাপেক্ষে গণনা" করতে:
এই প্যাটার্ন —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)— সবচেয়ে সাধারণ ড্যাশবোর্ডে ব্যবহৃত "শর্তাধীন গণনা"।
"কম্প্যাক্ট" ফর্ম
আপনি যখন একটি অভিব্যক্তি তুলনা করেন তখন একটি সংক্ষিপ্ত রূপও থাকে সঠিক মানের বিরুদ্ধে:
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 এর সমতুল্য, আরও কমপ্যাক্ট৷ এটি শুধুমাত্র সঠিক সমতার জন্য কাজ করে: যদি
আপনার প্রয়োজন >= বা অন্য তুলনা, আপনাকে প্রসারিত তে ফিরে যেতে হবে
ফর্ম
চেষ্টা করে দেখুন
প্রতিটি কর্মীর জন্য, প্রথম নাম (প্রথম_নাম), পদবী (শেষ_নাম) এবং একটি 'স্তরের' কলাম দেখান যা 'আল্টো' যদি বেতন কমপক্ষে 50000 হয়, অন্যথায় 'মানক'। তিন কলাম, প্রতি কর্মী এক সারি।
ইঙ্গিত দেখান
শর্ত হল বেতন >= 50000। মনে রাখবেন END দিয়ে CASE বন্ধ করতে এবং উপনাম 'tier' ব্যবহার করতে।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
ব্যায়াম পর্যালোচনা করুন
প্রতিটি বিভাগের জন্য (department_id), গণনা করুন কতজন কর্মচারীর উচ্চ বেতন (>= 50000) এবং কতজন স্ট্যান্ডার্ড ওয়ান (< 50000) SUM(CASE...) ব্যবহার করে। তিনটি কলাম: বিভাগ_আইডি, উচ্চ, মানক। ডিপার্টমেন্ট_আইডি (NULLS LAST) দ্বারা অর্ডার করুন।
ইঙ্গিত দেখান
SUM(CASE WHEN... THEN 1 ELSE 0 END) প্যাটার্ন হল শর্তসাপেক্ষ গণনা।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ