यदि आपने डेटाबेस के साथ काम किया है, तो आपने संभवतः देखा होगा कि डेटा शायद ही कभी परफेक्ट होता है और सार्थक इनसाइट्स निकालने के लिए उसे अक्सर रूपांतरित करने की आवश्यकता पड़ती है।
इसी आवश्यकता को पूरा करने के लिए SQL एक शक्तिशाली कॉन्स्ट्रक्ट देता है, जिसे CASE स्टेटमेंट कहा जाता है, जो मौजूदा कॉलमों पर लागू शर्तों के आधार पर नए कॉलम बनाने या डेटा को रूपांतरित करने की सुविधा देता है।
इस लेख में, हम समझाएँगे कि CASE स्टेटमेंट क्या है, यह क्यों आवश्यक है, और इसके विभिन्न उपयोग मामलों का अन्वेषण करेंगे ताकि आप इसकी क्षमता का लाभ उठा सकें। आइए शुरू करें!
CASE स्टेटमेंट क्या है?
SQL में Case स्टेटमेंट एक कंडीशनल एक्सप्रेशन है जो आपकी क्वेरी में निर्णय-निर्माण लॉजिक जोड़ता है। यह Python के if-elif-else स्टेटमेंट जैसा काम करता है, जिससे आप एकाधिक शर्तों का मूल्यांकन कर सकते हैं और उन शर्तों के आधार पर विशिष्ट परिणाम लौटा सकते हैं।
सामान्य सिंटैक्स इस प्रकार है:
CASEWHEN boolean_condition1 THEN result1
WHEN boolean_condition2 THEN result2
ELSE result3
ENDसंचालित द्वारा
यह इस तरह काम करता है:
CASE कीवर्ड एक्सप्रेशन की शुरुआत को दर्शाता है, जबकि END इसका समापन करता है—शर्तों वाले स्टेटमेंट को एक फ्रेम की तरह समेटते हुए।
हर WHEN क्लॉज़ एक शर्त का मूल्यांकन करता है। यदि शर्त सत्य है, तो संबंधित THEN क्लॉज़ निर्दिष्ट परिणाम लौटाता है।
यदि WHEN क्लॉज़ में दी गई कोई भी शर्त पूरी नहीं होती, तो ELSE क्लॉज़ एक डिफ़ॉल्ट परिणाम देता है।
CASE स्टेटमेंट महत्वपूर्ण क्यों है?
CASE WHEN स्टेटमेंट SQL क्वेरियों में कई प्रमुख लाभ प्रदान करता है:
डेटा रूपांतरण: मौजूदा कॉलमों के मानों के आधार पर नए कॉलम बनाने में सक्षम बनाता है।
सशर्त समष्टिकरण: शर्तों के आधार पर विशिष्ट डेटा उपसमूहों के लिए समष्टिगत मान (जैसे, योग, गणना, अधिकतम) निकालने देता है।
डेटा फ़िल्टरिंग: आप विशिष्ट मानदंडों के आधार पर पंक्तियों को शामिल या बाहर कर सकते हैं।
क्वेरी सरलीकरण और पठनीयता: यह लॉजिक को एक ही क्वेरी में समेकित करने में मदद करता है, जिससे कई क्वेरियों, अस्थायी तालिकाओं या जटिल जॉइनों की आवश्यकता घटती है।
प्रदर्शन अनुकूलन: SQL क्वेरियों की जटिलता को कम करके, CASE स्टेटमेंट प्रदर्शन को अनुकूलित करने और निष्पादन समय को घटाने में योगदान दे सकता है, खासकर जब यह अतिरिक्त गणनाओं और रूपांतरणों की आवश्यकता टाल देता है।
सिंपल CASE स्टेटमेंट
इस लेख में, हम cinema डेटाबेस की film तालिका का उपयोग करेंगे। मान लीजिए कि हम ROI (ग्रॉस से बजट का अनुपात) के मानों के आधार पर एक नया श्रेणीगत कॉलम बनाना चाहते हैं:
SELECT
title,
gross,
budget,
gross / budget AS ROI,CASEWHEN gross / budget <1THEN'low ROI'WHEN gross / budget BETWEEN1AND2THEN'medium ROI'ELSE'high ROI'ENDas ROI_group
FROM cinema.films
WHERE budget >0AND gross >0AND release_year =2015;संचालित द्वारा
ग्रॉस और बजट दिए जाने पर, हमने ROI की गणना की है, जो एक लोकप्रिय प्रॉफिटेबिलिटी मीट्रिक है जो किसी निवेश से उत्पन्न आय को मापता है।
ROI फ़ील्ड के अतिरिक्त, हमने इसकी श्रेणीकरण भी प्राप्त की ताकि संप्रेषण बेहतर हो:
यदि फिल्मों का ROI 1 से कम है, तो मान “low ROI” है
ROI 1 और 2 के बीच वाली फिल्में “medium ROI” श्रेणी में आती हैं
“High ROI” वह लेबल है जो उन फिल्मों को दिया जाता है जिनका ROI 2 या उससे अधिक है।
हमने उन फिल्मों को भी फ़िल्टर किया है जिनका बजट या ग्रॉस शून्य या नकारात्मक है। साथ ही, हमने परिणामों को 2015 में रिलीज़ हुई फिल्मों तक सीमित किया है।
GROUP BY क्लॉज़ में CASE का उपयोग
पहले उदाहरण में, हमने एक नया फ़ील्ड बनाया, जिसे डेटा को समष्टिगत करने और अतिरिक्त इनसाइट्स प्राप्त करने के लिए लागू किया जा सकता है।
उदाहरण के लिए, हम प्रत्येक ROI समूह के लिए औसत ग्रॉस और औसत बजट की गणना कर सकते हैं:
डेटा को समूहित करने के लिए, हमने बस CASE स्टेटमेंट को GROUP BY क्लॉज़ में रख दिया। अतिरिक्त इनसाइट्स के लिए, हमने पंक्तियों को औसत ग्रॉस के आधार पर घटते क्रम में क्रमबद्ध किया। इस तरह, हम देख पाते हैं कि सबसे अधिक औसत ग्रॉस high ROI को मिलता है और low ROI के लिए विपरीत।
WHERE क्लॉज़ में CASE का उपयोग
CASE स्टेटमेंट का एक और लाभ यह है कि यह विशिष्ट शर्तों के आधार पर पंक्तियों को फ़िल्टर करने में सक्षम बनाता है। उदाहरण के लिए, हम फिल्म की भाषा के आधार पर अलग-अलग ROI थ्रेशहोल्ड लागू कर सकते हैं। यह ज्ञात है कि अंग्रेज़ी फिल्मों का ROI लगातार अधिक होता है। इसलिए, उनके लिए थ्रेशहोल्ड उच्च होना चाहिए, जबकि हम मानते हैं कि अन्य भाषाओं में ROI कम होता है।
SELECT
title,
gross,
budget,language,
gross / budget AS ROI
FROM cinema.films
WHERECASEWHENlanguage='English'THEN gross / budget >2-- English films need ROI > 2WHENlanguage='French'THEN gross / budget >1.5-- French films need ROI > 1.5ELSE gross / budget >1.3-- Default for other languagesEND;संचालित द्वारा
एग्रीगेशन की गणना
हम 2015 में रिलीज़ हुई high ROI बनाम low ROI वाली फिल्मों की संख्या की गणना करने में भी रुचि ले सकते हैं:
SELECTSUM(CASEWHEN gross / budget >2THEN1ELSE0END)AS high_roi_films,SUM(CASEWHEN gross / budget BETWEEN1AND2THEN1ELSE0END)AS medium_roi_films,SUM(CASEWHEN gross / budget <1THEN1ELSE0END)AS low_roi_films
FROM cinema.films
WHERE budget >0AND gross >0AND release_year =2015;संचालित द्वारा
SUM फ़ंक्शन के अंदर, मानो हम एक नया फ़ील्ड बनाते हैं जिसका मान 1 होता है जब ROI उस थ्रेशहोल्ड तक पहुँचता है, वरना 0। इस नई बाइनरी वैरिएबल का योग लेने पर हमें उन फिल्मों की संख्या मिलती है जो उस मापदंड को पूरा करती हैं।
आउटपुट से, हम देख सकते हैं कि अधिकांश फिल्मों का ROI 1 से कम है, जबकि कुछ ही फिल्में अत्यधिक लाभप्रद हैं।
नेस्टेड Case स्टेटमेंट
सबसे उन्नत उपयोग मामलों में से एक नेस्टेड केस स्टेटमेंट है, यानी एक CASE के अंदर दूसरा CASE। यह तब बहुत उपयोगी होता है जब आपको डेटा को उपसमूहों में बाँटना हो और प्रत्येक उपसमूह के लिए अलग लॉजिक लागू करना हो।
पहले उदाहरण की तरह, हम एक नया कॉलम बनाना चाहते हैं, जिस पर ROI के मानों का प्रभाव होना चाहिए। जैसा कि हमने पहले कहा, अंग्रेज़ी-भाषा की फिल्मों का ROI अन्य भाषाओं की फिल्मों की तुलना में वैश्विक स्तर पर अधिक होता है।
इसी कारण, ROI और भाषा—दोनों को ध्यान में रखते हुए—फिल्मों को ROI समूहों में वर्गीकृत करना बेहतर होगा
SELECT
title,language,
gross / budget AS ROI,CASEWHENlanguage='English'THENCASEWHEN gross / budget <2THEN'low ROI'WHEN gross / budget BETWEEN2AND3THEN'medium ROI'ELSE'high ROI'ENDELSECASEWHEN gross / budget <1THEN'low ROI'WHEN gross / budget BETWEEN1AND2THEN'medium ROI'ELSE'high ROI'ENDENDAS ROI_group
FROM cinema.films
WHERE budget >0AND gross >0and release_year =2006;संचालित द्वारा
क्वेरी में, बाहरी CASE स्टेटमेंट यह जाँचने के लिए उपयोग किया गया है कि भाषा अंग्रेज़ी है या नहीं। भाषा के अनुसार, अंदर वाला CASE ROI का मूल्यांकन करता है: अंग्रेज़ी फिल्मों के लिए थ्रेशहोल्ड अधिक हैं और गैर-अंग्रेज़ी फिल्मों के लिए कम। यह बहु-स्तरीय शर्त low, medium और high-ROI फिल्मों के विभाजन में सुधार करने देती है।
निष्कर्ष
CASE स्टेटमेंट आपके डेटा से सार्थक इनसाइट्स निकालने के लिए एक अपरिहार्य SQL कॉन्स्ट्रक्ट है। सिद्धांत को व्यावहारिक उदाहरणों के साथ पिरोया गया है ताकि आप इस शक्तिशाली कंडीशनल एक्सप्रेशन को गहराई से समझ सकें। यदि आप और गहराई में जाना चाहते हैं, तो data manipulation in SQL course पर नज़र डालें। इसमें CASE स्टेटमेंट के साथ-साथ SQL के अन्य प्रमुख पहलू, जैसे सबक्वेरियाँ और विंडो फ़ंक्शंस भी शामिल हैं। अंत में, SQL Fundamentals भी देखें ताकि SQL में महारत हासिल करने में मदद करने वाले पाठ्यक्रमों का अवलोकन मिल सके।
यदि आपने डेटाबेस के साथ काम किया है, तो आपने संभवतः देखा होगा कि डेटा शायद ही कभी परफेक्ट होता है और सार्थक इनसाइट्स निकालने के लिए उसे अक्सर रूपांतरित करने की आवश्यकता पड़ती है।
इसी आवश्यकता को पूरा करने के लिए SQL एक शक्तिशाली कॉन्स्ट्रक्ट देता है, जिसे
CASEस्टेटमेंट कहा जाता है, जो मौजूदा कॉलमों पर लागू शर्तों के आधार पर नए कॉलम बनाने या डेटा को रूपांतरित करने की सुविधा देता है।इस लेख में, हम समझाएँगे कि CASE स्टेटमेंट क्या है, यह क्यों आवश्यक है, और इसके विभिन्न उपयोग मामलों का अन्वेषण करेंगे ताकि आप इसकी क्षमता का लाभ उठा सकें। आइए शुरू करें!
CASE स्टेटमेंट क्या है?
SQL में Case स्टेटमेंट एक कंडीशनल एक्सप्रेशन है जो आपकी क्वेरी में निर्णय-निर्माण लॉजिक जोड़ता है। यह Python के if-elif-else स्टेटमेंट जैसा काम करता है, जिससे आप एकाधिक शर्तों का मूल्यांकन कर सकते हैं और उन शर्तों के आधार पर विशिष्ट परिणाम लौटा सकते हैं।
सामान्य सिंटैक्स इस प्रकार है:
यह इस तरह काम करता है:
CASEकीवर्ड एक्सप्रेशन की शुरुआत को दर्शाता है, जबकिENDइसका समापन करता है—शर्तों वाले स्टेटमेंट को एक फ्रेम की तरह समेटते हुए।हर
WHENक्लॉज़ एक शर्त का मूल्यांकन करता है। यदि शर्त सत्य है, तो संबंधितTHENक्लॉज़ निर्दिष्ट परिणाम लौटाता है।यदि
WHENक्लॉज़ में दी गई कोई भी शर्त पूरी नहीं होती, तोELSEक्लॉज़ एक डिफ़ॉल्ट परिणाम देता है।CASE स्टेटमेंट महत्वपूर्ण क्यों है?
CASE WHEN स्टेटमेंट SQL क्वेरियों में कई प्रमुख लाभ प्रदान करता है:
सिंपल CASE स्टेटमेंट
इस लेख में, हम
cinemaडेटाबेस कीfilmतालिका का उपयोग करेंगे। मान लीजिए कि हम ROI (ग्रॉस से बजट का अनुपात) के मानों के आधार पर एक नया श्रेणीगत कॉलम बनाना चाहते हैं:ग्रॉस और बजट दिए जाने पर, हमने ROI की गणना की है, जो एक लोकप्रिय प्रॉफिटेबिलिटी मीट्रिक है जो किसी निवेश से उत्पन्न आय को मापता है।
ROI फ़ील्ड के अतिरिक्त, हमने इसकी श्रेणीकरण भी प्राप्त की ताकि संप्रेषण बेहतर हो:
हमने उन फिल्मों को भी फ़िल्टर किया है जिनका बजट या ग्रॉस शून्य या नकारात्मक है। साथ ही, हमने परिणामों को 2015 में रिलीज़ हुई फिल्मों तक सीमित किया है।
GROUP BY क्लॉज़ में CASE का उपयोग
पहले उदाहरण में, हमने एक नया फ़ील्ड बनाया, जिसे डेटा को समष्टिगत करने और अतिरिक्त इनसाइट्स प्राप्त करने के लिए लागू किया जा सकता है।
उदाहरण के लिए, हम प्रत्येक ROI समूह के लिए औसत ग्रॉस और औसत बजट की गणना कर सकते हैं:
डेटा को समूहित करने के लिए, हमने बस CASE स्टेटमेंट को GROUP BY क्लॉज़ में रख दिया। अतिरिक्त इनसाइट्स के लिए, हमने पंक्तियों को औसत ग्रॉस के आधार पर घटते क्रम में क्रमबद्ध किया। इस तरह, हम देख पाते हैं कि सबसे अधिक औसत ग्रॉस high ROI को मिलता है और low ROI के लिए विपरीत।
WHERE क्लॉज़ में CASE का उपयोग
CASE स्टेटमेंट का एक और लाभ यह है कि यह विशिष्ट शर्तों के आधार पर पंक्तियों को फ़िल्टर करने में सक्षम बनाता है। उदाहरण के लिए, हम फिल्म की भाषा के आधार पर अलग-अलग ROI थ्रेशहोल्ड लागू कर सकते हैं। यह ज्ञात है कि अंग्रेज़ी फिल्मों का ROI लगातार अधिक होता है। इसलिए, उनके लिए थ्रेशहोल्ड उच्च होना चाहिए, जबकि हम मानते हैं कि अन्य भाषाओं में ROI कम होता है।
एग्रीगेशन की गणना
हम 2015 में रिलीज़ हुई high ROI बनाम low ROI वाली फिल्मों की संख्या की गणना करने में भी रुचि ले सकते हैं:
SUM फ़ंक्शन के अंदर, मानो हम एक नया फ़ील्ड बनाते हैं जिसका मान 1 होता है जब ROI उस थ्रेशहोल्ड तक पहुँचता है, वरना 0। इस नई बाइनरी वैरिएबल का योग लेने पर हमें उन फिल्मों की संख्या मिलती है जो उस मापदंड को पूरा करती हैं।
आउटपुट से, हम देख सकते हैं कि अधिकांश फिल्मों का ROI 1 से कम है, जबकि कुछ ही फिल्में अत्यधिक लाभप्रद हैं।
नेस्टेड Case स्टेटमेंट
सबसे उन्नत उपयोग मामलों में से एक नेस्टेड केस स्टेटमेंट है, यानी एक CASE के अंदर दूसरा CASE। यह तब बहुत उपयोगी होता है जब आपको डेटा को उपसमूहों में बाँटना हो और प्रत्येक उपसमूह के लिए अलग लॉजिक लागू करना हो।
पहले उदाहरण की तरह, हम एक नया कॉलम बनाना चाहते हैं, जिस पर ROI के मानों का प्रभाव होना चाहिए। जैसा कि हमने पहले कहा, अंग्रेज़ी-भाषा की फिल्मों का ROI अन्य भाषाओं की फिल्मों की तुलना में वैश्विक स्तर पर अधिक होता है।
इसी कारण, ROI और भाषा—दोनों को ध्यान में रखते हुए—फिल्मों को ROI समूहों में वर्गीकृत करना बेहतर होगा
क्वेरी में, बाहरी CASE स्टेटमेंट यह जाँचने के लिए उपयोग किया गया है कि भाषा अंग्रेज़ी है या नहीं। भाषा के अनुसार, अंदर वाला CASE ROI का मूल्यांकन करता है: अंग्रेज़ी फिल्मों के लिए थ्रेशहोल्ड अधिक हैं और गैर-अंग्रेज़ी फिल्मों के लिए कम। यह बहु-स्तरीय शर्त low, medium और high-ROI फिल्मों के विभाजन में सुधार करने देती है।
निष्कर्ष
CASE स्टेटमेंट आपके डेटा से सार्थक इनसाइट्स निकालने के लिए एक अपरिहार्य SQL कॉन्स्ट्रक्ट है। सिद्धांत को व्यावहारिक उदाहरणों के साथ पिरोया गया है ताकि आप इस शक्तिशाली कंडीशनल एक्सप्रेशन को गहराई से समझ सकें। यदि आप और गहराई में जाना चाहते हैं, तो data manipulation in SQL course पर नज़र डालें। इसमें CASE स्टेटमेंट के साथ-साथ SQL के अन्य प्रमुख पहलू, जैसे सबक्वेरियाँ और विंडो फ़ंक्शंस भी शामिल हैं। अंत में, SQL Fundamentals भी देखें ताकि SQL में महारत हासिल करने में मदद करने वाले पाठ्यक्रमों का अवलोकन मिल सके।