कोर्स
कंडीशनल एक्सप्रेशंस किसी भी प्रोग्रामिंग पैरेडाइम के सबसे बुनियादी तत्वों में से एक हैं। आम कंडीशनल एक्सप्रेशंस में if-else ब्लॉक्स और switch केसेज़ शामिल हैं। PostgreSQL में आप WHEN-THEN केस का उपयोग करके कंडीशनल एक्सप्रेशन बना सकते हैं, जो if-else ब्लॉक्स के काफी समान है। इस ट्यूटोरियल में, आप यह करना सीखेंगे।
कंडीशन क्वेरियाँ लिखना शुरू करने से पहले, यह महत्वपूर्ण है कि आप एक लोकल PostgreSQL डेटाबेस सेट अप करें। आप यह इस ट्यूटोरियल के पहले सेक्शन में करेंगे।
नोट: इस ट्यूटोरियल के साथ चलने के लिए आपको SQL और PostgreSQL की बुनियादी जानकारी होनी चाहिए। निम्न संसाधनों से आप बेसिक्स रिफ्रेश कर सकते हैं:
लोकल रूप से PostgreSQL डेटाबेस सेट अप करना
डेटाबेस सेट अप करने के लिए, आप इस लेख का अनुसरण कर सकते हैं। बैकअप को सफलतापूर्वक रिस्टोर करने के बाद, आपको डेटाबेस में ये टेबल्स दिखाई देंगी:
- countries
- route_table
- station_table
- train_table
हालांकि, यह ट्यूटोरियल केवल countries टेबल का उपयोग करता है। डेटाबेस बैकअप में दी गई टेबल्स को बेझिझक एक्सप्लोर करें। आप अपने स्वयं के डेटाबेस और टेबल्स भी बनाना चाह सकते हैं। यदि आपने डेटाबेस बैकअप रिस्टोर कर लिया है, तो अब आपके पास दुनिया भर के विभिन्न देशों के विवरणों से भरी एक टेबल होनी चाहिए। अब संक्षेप में countries टेबल का अन्वेषण करते हैं।
countries टेबल का संक्षिप्त अन्वेषण
डेटाबेस रिस्टोर करने के बाद, आप इस टेबल को pgAdmin इंटरफ़ेस में देख सकते हैं, जो PostgreSQL की डिफ़ॉल्ट इंस्टॉलेशन के साथ आता है। एक साधारण SELECT स्टेटमेंट चलाने पर आपको कॉलम्स, उनके डेटा-टाइप्स और टेबल में मौजूद पंक्तियों के बारे में पता चलता है -

टेबल में दुनिया के विभिन्न क्षेत्रों से कुल 206 देशों का विवरण है। ठीक-ठीक कितने क्षेत्र? नीचे दी गई क्वेरी इस प्रश्न का उत्तर दे देगी।
SELECT COUNT(DISTINCT(region)) from countries;
पता चलता है कि इस टेबल में 23 अलग-अलग क्षेत्र शामिल हैं, जैसे वेस्टर्न यूरोप, पॉलिनेशिया, मिडिल ईस्ट आदि। आप अपने छोटे-छोटे प्रश्नों के साथ टेबल को एक्सप्लोर कर सकते हैं और इस दौरान रोचक तथ्य मिल सकते हैं। अब एक बुनियादी PostgreSQL CASE की संरचना देखते हैं।
PostgreSQL CASE का परिचय
नीचे दिए गए WHEN-THEN कॉन्स्ट्रक्ट के साथ PostgreSQL केस का सामान्य प्रारूप बताया गया है -
CASE
WHEN condition_1 THEN result_1
WHEN condition_2 THEN result_2
...
ELSE result_n
END
PostgreSQL में CASE बनाते समय ध्यान रखने योग्य कुछ महत्वपूर्ण बिंदु:
-
हर कंडीशन एक बूलियन एक्सप्रेशन होती है और उसके आउटपुट के आधार पर परिणाम चुना जाता है। यदि
WHENके अनुरूप सभी एक्सप्रेशनFalseनिकलते हैं, तोELSEभाग के अनुरूप परिणाम दिखाया जाता है। यदि आपELSEभाग नहीं देते; तो क्वेरी null लौटाएगी। -
किसी कंडीशन को आम तौर पर उस कॉलम पर लगाया जाता है जो उस टेबल में मौजूद हो जिस पर आप काम कर रहे हैं। इस तरह की कंडीशनल क्वेरी कॉन्स्ट्रक्ट प्रायः
SELECTस्टेटमेंट्स के साथ किए जाते हैं। ध्यान रखें कि जिस कॉलम पर आप बूलियन एक्सप्रेशंस (CASEमें) दे रहे हैं, वह आपके क्वेरी केSELECTस्टेटमेंट में मौजूद होना चाहिए। लेकिन जब आपCASEको where क्लॉज़ के साथ पेयर करते हैं, तो यह आवश्यक नहीं रहता (इस पर आगे चर्चा है)। -
रिजल्ट्स का डेटा-टाइप समान होना चाहिए। आप
result_1मेंstringऔरresult_2मेंintegerनहीं लौटा सकते, आदि।
अब कुछ उदाहरण देखते हैं।
PostgreSQL CASE लिखना
सरल से शुरू करते हैं। अब आप स्वतंत्रता वर्ष के अनुसार देशों को समूहित करने के लिए एक CASE लिखेंगे। स्वतंत्रता वर्ष indep_year कॉलम में रिकॉर्ड किए गए हैं। मान लीजिए आपको देशों के स्वतंत्रता वर्षों के तीन समूहों का पालन करना है। आप इसके लिए तीन समूह बनाएंगे -
- 1900 से पहले (
indep_year < 1900) - 1900 और 1930 के बीच (
indep_year <= 1930) - 1930 के बाद (
indep_year > 1930)
क्वेरी के अंतिम परिणाम में निम्न कॉलम होने चाहिए -
- name (देश का नाम)
- continent (जिस महाद्वीप से देश संबंधित है)
- indep_year
- और वह स्वतंत्रता वर्ष समूह जिसे आप बनाएंगे। इसे
indep_year_groupनाम दें।
अब क्वेरी लिखते हैं -
SELECT name, continent, indep_year,
CASE WHEN indep_year < 1900 THEN 'before 1900'
WHEN indep_year <= 1930 THEN 'between 1900 and 1930'
ELSE 'after 1930' END
AS indep_year_group
FROM countries
ORDER BY indep_year_group;
(यह क्वेरी DataCamp के Joining Data in SQL कोर्स से प्रेरित है।)
क्वेरी चलाने पर आप कई देश देखेंगे जैसे Palestine, Puerto Rico आदि, जिनके लिए टेबल में स्वतंत्रता वर्ष नहीं दिया गया है। इसलिए वे between 1900 and 1930 समूह में आ गए।
PostgreSQL के CASE में एक से अधिक कंडीशन हो सकती हैं। टेबल में कुछ प्रविष्टियाँ ऐसी हैं जहाँ देश का नाम और राजधानी एक ही है। आप इसे अपने पहले बनाए गए CASE में जोड़ सकते हैं -
SELECT name, continent, indep_year,
CASE WHEN (indep_year < 1900) AND (countries.name = countries.capital) THEN 'before 1900 and capital same'
WHEN indep_year <= 1930 AND (countries.name = countries.capital) THEN 'between 1900 and 1930 and capital same'
ELSE 'after 1930_and_no_same_capital' END
AS indep_year_group
FROM countries
ORDER BY indep_year_group;
CASE के बारे में एक और रोचक बात यह है कि आप इन्हें SUM() जैसी एग्रीगेट फ़ंक्शंस के साथ पेयर कर सकते हैं। एग्रीगेट फ़ंक्शन SUM() के साथ CASE लागू करने के लिए, एक अलग टेबल लेना अच्छा रहेगा। आइए student_grades नाम की एक सरल टेबल बनाते हैं, जिसमें निम्न कॉलम और डेटा-टाइप्स होंगे -
- student_name (string)
- student_stream (string)
- student_grade (character)
निम्न क्वेरी आपके लिए यह टेबल बनाती है -
CREATE TABLE student_grades
(student_name character varying,
student_stream character varying,
student_grade character);
अब टेबल में कुछ रिकॉर्ड्स इन्सर्ट करते हैं। आप यह कुछ INSERT स्टेटमेंट्स से कर सकते हैं। मान लें इन्सर्शन के बाद student_grades टेबल में निम्न रिकॉर्ड्स हैं -

अब, आप एक CASE लिखेंगे ताकि कुछ ग्रेड समूहों से संबंधित छात्रों की संख्या का योग निकाला जा सके। जैसा कि आप देख सकते हैं, टेबल के अनुसार तीन अलग-अलग ग्रेड हैं - A, B और C। कंडीशनल क्वेरी को निम्न जैसी आउटपुट देनी चाहिए -

इसके लिए क्वेरी -
SELECT
SUM (
CASE
WHEN student_grade = 'A' THEN
1
ELSE
0
END
) AS "High Scoring",
SUM (
CASE
WHEN student_grade = 'B' THEN
1
ELSE
0
END
) AS "Mid Scoring",
SUM (
CASE
WHEN student_grade = 'C' THEN
1
ELSE
0
END
) AS "Low Scoring"
FROM
student_grades;
इस तरह आप CASE को एग्रीगेट फ़ंक्शंस के साथ पेयर करके डेटा के बारे में रोचक जानकारियाँ निकाल सकते हैं।
निष्कर्ष और आगे की पढ़ाई
इस ट्यूटोरियल के लिए बस इतना ही। इस ट्यूटोरियल में, आपने अपने SQL क्वेरियों में if-then जैसी कंडीशनिंग को शामिल करके रोचक रिपोर्टिंग तैयार करना सीखा। आपने इस कौशल को मजबूत करने के लिए कई उदाहरणों पर काम किया। यदि आप और चुनौतीपूर्ण अभ्यास ढूंढ रहे हैं, तो आपको SQL पर निम्न DataCamp कोर्स करने चाहिए -
इस ट्यूटोरियल पर अपने प्रश्न Comments सेक्शन में बताने के लिए स्वतंत्र महसूस करें।