Last chance! 50% off DataCamp Premium
Sale ends in
यदि आपने डेटाबेस के साथ काम किया है, तो आपने संभवतः देखा होगा कि डेटा शायद ही कभी परफेक्ट होता है और सार्थक इनसाइट्स निकालने के लिए उसे अक्सर रूपांतरित करने की आवश्यकता पड़ती है।
इसी आवश्यकता को पूरा करने के लिए SQL एक शक्तिशाली कॉन्स्ट्रक्ट देता है, जिसे CASE स्टेटमेंट कहा जाता है, जो मौजूदा कॉलमों पर लागू शर्तों के आधार पर नए कॉलम बनाने या डेटा को रूपांतरित करने की सुविधा देता है।
इस लेख में, हम समझाएँगे कि CASE स्टेटमेंट क्या है, यह क्यों आवश्यक है, और इसके विभिन्न उपयोग मामलों का अन्वेषण करेंगे ताकि आप इसकी क्षमता का लाभ उठा सकें। आइए शुरू करें!
SQL में Case स्टेटमेंट एक कंडीशनल एक्सप्रेशन है जो आपकी क्वेरी में निर्णय-निर्माण लॉजिक जोड़ता है। यह Python के if-elif-else स्टेटमेंट जैसा काम करता है, जिससे आप एकाधिक शर्तों का मूल्यांकन कर सकते हैं और उन शर्तों के आधार पर विशिष्ट परिणाम लौटा सकते हैं।
सामान्य सिंटैक्स इस प्रकार है:
CASE
WHEN boolean_condition1 THEN result1
WHEN boolean_condition2 THEN result2
ELSE result3
END
यह इस तरह काम करता है:
CASE कीवर्ड एक्सप्रेशन की शुरुआत को दर्शाता है, जबकि END इसका समापन करता है—शर्तों वाले स्टेटमेंट को एक फ्रेम की तरह समेटते हुए।
हर WHEN क्लॉज़ एक शर्त का मूल्यांकन करता है। यदि शर्त सत्य है, तो संबंधित THEN क्लॉज़ निर्दिष्ट परिणाम लौटाता है।
यदि WHEN क्लॉज़ में दी गई कोई भी शर्त पूरी नहीं होती, तो ELSE क्लॉज़ एक डिफ़ॉल्ट परिणाम देता है।
CASE WHEN स्टेटमेंट SQL क्वेरियों में कई प्रमुख लाभ प्रदान करता है:
इस लेख में, हम cinema डेटाबेस की film तालिका का उपयोग करेंगे। मान लीजिए कि हम ROI (ग्रॉस से बजट का अनुपात) के मानों के आधार पर एक नया श्रेणीगत कॉलम बनाना चाहते हैं:
SELECT
title,
gross,
budget,
gross / budget AS ROI,
CASE
WHEN gross / budget < 1 THEN 'low ROI'
WHEN gross / budget BETWEEN 1 AND 2 THEN 'medium ROI'
ELSE 'high ROI'
END as ROI_group
FROM cinema.films
WHERE budget > 0 AND gross > 0 AND release_year = 2015;

ग्रॉस और बजट दिए जाने पर, हमने ROI की गणना की है, जो एक लोकप्रिय प्रॉफिटेबिलिटी मीट्रिक है जो किसी निवेश से उत्पन्न आय को मापता है।
ROI फ़ील्ड के अतिरिक्त, हमने इसकी श्रेणीकरण भी प्राप्त की ताकि संप्रेषण बेहतर हो:
हमने उन फिल्मों को भी फ़िल्टर किया है जिनका बजट या ग्रॉस शून्य या नकारात्मक है। साथ ही, हमने परिणामों को 2015 में रिलीज़ हुई फिल्मों तक सीमित किया है।
पहले उदाहरण में, हमने एक नया फ़ील्ड बनाया, जिसे डेटा को समष्टिगत करने और अतिरिक्त इनसाइट्स प्राप्त करने के लिए लागू किया जा सकता है।
उदाहरण के लिए, हम प्रत्येक ROI समूह के लिए औसत ग्रॉस और औसत बजट की गणना कर सकते हैं:
SELECT
CASE
WHEN gross / budget < 1 THEN 'low ROI'
WHEN gross / budget BETWEEN 1 AND 2 THEN 'medium ROI'
ELSE 'high ROI'
END AS ROI_group,
avg(gross) as avg_gross,
avg(budget) as avg_budget
FROM cinema.films
WHERE budget > 0 AND gross > 0 AND release_year = 2015
GROUP BY
CASE
WHEN gross / budget < 1 THEN 'low ROI'
WHEN gross / budget BETWEEN 1 AND 2 THEN 'medium ROI'
ELSE 'high ROI'
END
ORDER BY avg(gross) DESC
;

डेटा को समूहित करने के लिए, हमने बस CASE स्टेटमेंट को GROUP BY क्लॉज़ में रख दिया। अतिरिक्त इनसाइट्स के लिए, हमने पंक्तियों को औसत ग्रॉस के आधार पर घटते क्रम में क्रमबद्ध किया। इस तरह, हम देख पाते हैं कि सबसे अधिक औसत ग्रॉस high ROI को मिलता है और low ROI के लिए विपरीत।
CASE स्टेटमेंट का एक और लाभ यह है कि यह विशिष्ट शर्तों के आधार पर पंक्तियों को फ़िल्टर करने में सक्षम बनाता है। उदाहरण के लिए, हम फिल्म की भाषा के आधार पर अलग-अलग ROI थ्रेशहोल्ड लागू कर सकते हैं। यह ज्ञात है कि अंग्रेज़ी फिल्मों का ROI लगातार अधिक होता है। इसलिए, उनके लिए थ्रेशहोल्ड उच्च होना चाहिए, जबकि हम मानते हैं कि अन्य भाषाओं में ROI कम होता है।
SELECT
title,
gross,
budget,
language,
gross / budget AS ROI
FROM cinema.films
WHERE
CASE
WHEN language = 'English' THEN gross / budget > 2 -- English films need ROI > 2
WHEN language = 'French' THEN gross / budget > 1.5 -- French films need ROI > 1.5
ELSE gross / budget > 1.3 -- Default for other languages
END;

हम 2015 में रिलीज़ हुई high ROI बनाम low ROI वाली फिल्मों की संख्या की गणना करने में भी रुचि ले सकते हैं:
SELECT
SUM(CASE WHEN gross / budget > 2 THEN 1 ELSE 0 END) AS high_roi_films,
SUM(CASE WHEN gross / budget BETWEEN 1 AND 2 THEN 1 ELSE 0 END) AS medium_roi_films,
SUM(CASE WHEN gross / budget < 1 THEN 1 ELSE 0 END) AS low_roi_films
FROM cinema.films
WHERE budget > 0 AND gross > 0 AND release_year = 2015;

SUM फ़ंक्शन के अंदर, मानो हम एक नया फ़ील्ड बनाते हैं जिसका मान 1 होता है जब ROI उस थ्रेशहोल्ड तक पहुँचता है, वरना 0। इस नई बाइनरी वैरिएबल का योग लेने पर हमें उन फिल्मों की संख्या मिलती है जो उस मापदंड को पूरा करती हैं।
आउटपुट से, हम देख सकते हैं कि अधिकांश फिल्मों का ROI 1 से कम है, जबकि कुछ ही फिल्में अत्यधिक लाभप्रद हैं।
सबसे उन्नत उपयोग मामलों में से एक नेस्टेड केस स्टेटमेंट है, यानी एक CASE के अंदर दूसरा CASE। यह तब बहुत उपयोगी होता है जब आपको डेटा को उपसमूहों में बाँटना हो और प्रत्येक उपसमूह के लिए अलग लॉजिक लागू करना हो।
पहले उदाहरण की तरह, हम एक नया कॉलम बनाना चाहते हैं, जिस पर ROI के मानों का प्रभाव होना चाहिए। जैसा कि हमने पहले कहा, अंग्रेज़ी-भाषा की फिल्मों का ROI अन्य भाषाओं की फिल्मों की तुलना में वैश्विक स्तर पर अधिक होता है।
इसी कारण, ROI और भाषा—दोनों को ध्यान में रखते हुए—फिल्मों को ROI समूहों में वर्गीकृत करना बेहतर होगा
SELECT
title,
language,
gross / budget AS ROI,
CASE
WHEN language = 'English' THEN
CASE
WHEN gross / budget < 2 THEN 'low ROI'
WHEN gross / budget BETWEEN 2 AND 3 THEN 'medium ROI'
ELSE 'high ROI'
END
ELSE
CASE
WHEN gross / budget < 1 THEN 'low ROI'
WHEN gross / budget BETWEEN 1 AND 2 THEN 'medium ROI'
ELSE 'high ROI'
END
END AS ROI_group
FROM cinema.films
WHERE budget > 0 AND gross > 0 and release_year = 2006;

क्वेरी में, बाहरी CASE स्टेटमेंट यह जाँचने के लिए उपयोग किया गया है कि भाषा अंग्रेज़ी है या नहीं। भाषा के अनुसार, अंदर वाला CASE ROI का मूल्यांकन करता है: अंग्रेज़ी फिल्मों के लिए थ्रेशहोल्ड अधिक हैं और गैर-अंग्रेज़ी फिल्मों के लिए कम। यह बहु-स्तरीय शर्त low, medium और high-ROI फिल्मों के विभाजन में सुधार करने देती है।
CASE स्टेटमेंट आपके डेटा से सार्थक इनसाइट्स निकालने के लिए एक अपरिहार्य SQL कॉन्स्ट्रक्ट है। सिद्धांत को व्यावहारिक उदाहरणों के साथ पिरोया गया है ताकि आप इस शक्तिशाली कंडीशनल एक्सप्रेशन को गहराई से समझ सकें। यदि आप और गहराई में जाना चाहते हैं, तो data manipulation in SQL course पर नज़र डालें। इसमें CASE स्टेटमेंट के साथ-साथ SQL के अन्य प्रमुख पहलू, जैसे सबक्वेरियाँ और विंडो फ़ंक्शंस भी शामिल हैं। अंत में, SQL Fundamentals भी देखें ताकि SQL में महारत हासिल करने में मदद करने वाले पाठ्यक्रमों का अवलोकन मिल सके।
टॉप SQL कोर्सेज़
लर्निंग पाथ
कोर्स
कोर्स