Database
 sql >> डेटाबेस >  >> RDS >> Database

SQL में केस स्टेटमेंट कैसे लिखें

समस्या:

आप SQL में CASE कथन का उपयोग करना चाहते हैं।

उदाहरण:

आपके पास exam टेबल। आपको प्रत्येक परिणाम को निम्नलिखित टेक्स्ट मानों में से किसी एक को निर्दिष्ट करने की आवश्यकता है:'bad result' , 'average result' , या 'good result' . खराब परिणाम वे होते हैं जो 40 से कम होते हैं, अच्छे परिणाम 70 से ऊपर वाले होते हैं, और शेष औसत परिणाम होते हैं।

exam तालिका इस तरह दिखती है:

<थ>परिणाम
नाम
टोबी शॉ 56
केसी वाटसन 49
बेनी लिन 23
लेन स्लोअन 70
स्टीफ फॉक्स 85
रेगी वार्ड 40
गेल कैनेडी 66
ब्राइस म्यूएलर 90

समाधान 1:

SELECT
  name,
  result,
  CASE
    WHEN result < 40 THEN 'bad result'
    WHEN result > 70 THEN 'good result'
    ELSE 'average result'
  END AS category
FROM exam;

परिणाम तालिका इस तरह दिखती है:

<थ>परिणाम
नाम श्रेणी
टोबी शॉ 56 औसत परिणाम
केसी वाटसन 49 औसत परिणाम
बेनी लिन 23 खराब परिणाम
लेन स्लोअन 70 औसत परिणाम
स्टीफ फॉक्स 85 अच्छा परिणाम
रेगी वार्ड 40 औसत परिणाम
गेल कैनेडी 66 औसत परिणाम
ब्राइस म्यूएलर 90 अच्छा परिणाम

चर्चा:

अपनी विशिष्ट शर्तों के आधार पर मान प्रदर्शित करने के लिए, आपको एक CASE . लिखना होगा बयान। वाक्य रचना है:

CASE
  WHEN  THEN ,
  WHEN  THEN ,
  …
  ELSE 
END AS 

अगर condition_1 पूरा हो जाता है, तो पुनः प्राप्त मान value_1 है . यदि नहीं, तो डेटाबेस condition_2 के लिए जाँच करता है . अगर condition_2 सत्य है, तो पुनः प्राप्त मान value_2 है . यदि इनमें से कोई भी शर्त पूरी नहीं होती है, तो SQL शेष शर्तों के लिए एक-एक करके जाँच करता है जब तक कि कोई एक शर्त पूरी न हो जाए। अगर कोई भी शर्त पूरी नहीं होती है, तो value_n ELSE . के बाद निर्दिष्ट पुनर्प्राप्त किया गया है।

ELSE भाग वैकल्पिक है। यदि आप इसे छोड़ देते हैं और कोई भी शर्त पूरी नहीं होती है, तो आपको एक NULL मिलता है ।

END को याद रखें CASE खंड जब आप सभी शर्तों के साथ कर रहे हैं। बेशक, आपके द्वारा बनाए गए किसी भी कॉलम की तरह, आप उसका नाम बदल सकते हैं (AS <column_name> )।

हमारे उदाहरण में, 'bad result' असाइन किया जाता है जब result < 40, and 'good result' असाइन किया जाता है जब result > 70 . यदि इनमें से कोई भी शर्त पूरी नहीं होती है, तो मान 'average result' . है . साथ ही, टेक्स्ट मानों के नए बनाए गए कॉलम को नाम देने के लिए, आपको एक उपनाम (AS .) का उपयोग करना होगा श्रेणी)। आप इस प्रकार प्राप्त करते हैं:

  CASE
    WHEN result < 40 THEN 'bad result'
    WHEN result > 70 THEN 'good result'
    ELSE 'average result'
  END AS category

चूंकि 'average result' 40 . के बीच परिणामों को असाइन किया गया है और 70 (समावेशी), आप ELSE . के बजाय एक शर्त भी लिख सकते हैं (नीचे समाधान 2 देखें)। हालांकि, ELSE का उपयोग करना आसान है ।

समाधान 2:

SELECT
  name,
  result,
  CASE
    WHEN result < 40 THEN 'bad result'
    WHEN result > 70 THEN 'good result'
    WHEN result >= 40 AND result <= 70 THEN 'average result'
  END AS category
FROM exam;

परिणाम तालिका इस तरह दिखती है:

<थ>परिणाम
नाम श्रेणी
टोबी शॉ 56 औसत परिणाम
केसी वाटसन 49 औसत परिणाम
बेनी लिन 23 खराब परिणाम
लेन स्लोअन 70 औसत परिणाम
स्टीफ फॉक्स 85 अच्छा परिणाम
रेगी वार्ड 40 औसत परिणाम
गेल कैनेडी 66 औसत परिणाम
ब्राइस म्यूएलर 90 अच्छा परिणाम

चर्चा:

चूंकि 'average result' 40 . के बीच परिणामों को असाइन किया गया है और 70 (समावेशी), आप ELSE . के बजाय निम्न शर्त लिख सकते हैं :

WHEN result >= 40 AND result <= 70 THEN 'average result'

यदि आप ELSE . का उपयोग नहीं करते हैं और कोई NULL नहीं चाहिए category में s कॉलम, आपको यह सुनिश्चित करने की ज़रूरत है कि आप हर संभव result . का ध्यान रखें मूल्य। अगर कोई result है जो किसी भी शर्त को पूरा नहीं करता है, आपको एक NULL मिलता है ।

समाधान 3:

SELECT
  name,
  result,
  CASE
    WHEN result < 40 THEN 'bad result'
    WHEN result <= 70 THEN 'average result'
    ELSE 'good result'
  END AS category
FROM exam;

परिणाम तालिका इस तरह दिखती है:

<थ>परिणाम
नाम श्रेणी
टोबी शॉ 56 औसत परिणाम
केसी वाटसन 49 औसत परिणाम
बेनी लिन 23 खराब परिणाम
लेन स्लोअन 70 औसत परिणाम
स्टीफ फॉक्स 85 अच्छा परिणाम
रेगी वार्ड 40 औसत परिणाम
गेल कैनेडी 66 औसत परिणाम
ब्राइस म्यूएलर 90 अच्छा परिणाम

चर्चा:

CASE . में निर्दिष्ट शर्तें पिछले समाधानों की तरह गैर-अतिव्यापी हो सकता है या इस समाधान की तरह अतिव्यापी हो सकता है। पहली शर्त पहले जैसी ही है – result < 40 . के लिए , category 'bad result' . नीचे दिए गए सभी परिणाम 40 इस बिंदु पर यह मान असाइन किया गया है और अब आपको उनके साथ कुछ भी करने की आवश्यकता नहीं है। इसका मतलब है कि यह सुनिश्चित करने की कोई आवश्यकता नहीं है कि result >= 40 'average result' . के लिए शर्तें निर्दिष्ट करने में - 40 से कम के सभी परिणामों का पहले से ही मान 'bad result' . होता है सौंपा गया। अंत में, शेष परिणामों के लिए श्रेणी होनी चाहिए 'good result'; एक साधारण ELSE 'good result' इसकी देखभाल करता है। आप इस प्रकार प्राप्त करते हैं:

CASE
    WHEN result < 40 THEN 'bad result'
    WHEN result <= 70 THEN 'average result'
    ELSE 'good result'
END AS category

नोट:CASE . में शर्तों का क्रम मायने रखता है। यदि आप पहली दो स्थितियों के क्रम को उलट देते हैं (अर्थात, यदि आप निर्दिष्ट करते हैं WHEN result <= 70 THEN 'average result' पहले तो WHEN result <= 70 THEN 'average result' दूसरा), सभी परिणाम 70 . से कम या बराबर अंत में 'average result' श्रेणी, जिसका कोई परिणाम 'bad result' . को निर्दिष्ट नहीं किया गया है श्रेणी।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. टेबल एक्सप्रेशन के मूल तत्व, भाग 5 - सीटीई, तार्किक विचार

  2. एसक्यूएल एक्सप्रेस स्थापित करना

  3. टी-एसक्यूएल में तिथि के अनुसार ऑर्डर कैसे करें

  4. SQL चौराहा स्लाइड और नमूने

  5. FrankenQueries:जब SQL और NoSQL टकराते हैं