मॉड्यूल पाठ (3/4)
सशर्त तर्क: मामला कब
अब तक हमने जो कुछ भी देखा है वह डेटा को वैसे ही निकालता है जैसे वह है। हालाँकि, अक्सर, आप चाहते हैं
इसे परिवर्तित करने के लिए: वेतन को स्तरों में वर्गीकृत करें, नई नियुक्तियों को इस प्रकार चिह्नित करें
"जूनियर", एक संख्यात्मक कोड को एक पठनीय लेबल में अनुवादित करें। SQL का मानक
इसके लिए टूल को 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 है। CASE को END के साथ बंद करना और उपनाम 'टियर' का उपयोग करना याद रखें।
3 प्रयासों के बाद समाधान उपलब्ध है
व्यायाम की समीक्षा करें
प्रत्येक विभाग (विभाग_आईडी) के लिए, SUM(CASE...) का उपयोग करके गणना करें कि कितने कर्मचारियों का वेतन उच्च है (>= 50000) और कितने कर्मचारियों का मानक वेतन (< 50000) है। तीन कॉलम: विभाग_आईडी, उच्च, मानक। विभाग_आईडी द्वारा आदेश (अंतिम शून्य)।
संकेत दिखाएँ
योग (मामला जब ... तब 1 अन्य 0 अंत) पैटर्न सशर्त गणना है।
3 प्रयासों के बाद समाधान उपलब्ध है