इंटरव्यू में पूछा जाने वाला सबसे आम और महत्वपूर्ण सवाल है कि हम एक टेबल में Nth का सबसे ज्यादा वेतन कैसे पा सकते हैं (2 सबसे ज्यादा सैलरी, 3 सबसे ज्यादा सैलरी, या Nth सबसे ज्यादा सैलरी), जहां N 2, 3, 4, 5 या कुछ भी हो सकता है।
प्रत्येक प्रोग्रामर जानता है कि n उच्चतम वेतन पाने का सबसे आसान तरीका एक तालिका में SQL (स्ट्रक्चर्ड क्वेरी लैंग्वेज) का उपयोग करना है।
जब भी साक्षात्कारकर्ता आपसे 2 उच्चतम वेतन, 4 उच्चतम वेतन, आदि के बारे में कोई प्रश्न पूछता है, तो इस प्रश्न को हल करने के लिए, हमें कुछ महत्वपूर्ण अवधारणाओं के बारे में पता होना चाहिए जैसे कि एक सबक्वेरी, उपयोग किए जाने वाले फ़ंक्शन जैसे row_num (), रैंक रैंक () , आदि.
यह लेख आपको एन उच्चतम वेतन खोजने के विभिन्न तरीकों के बारे में बताएगा।
मौजूदा तालिकाओं पर विचार करें जिनमें निम्नलिखित रिकॉर्ड हैं:
टेबल:कर्मचारी
कर्मचारी | FIRST_NAME | LAST_NAME | वेतन | शहर | विभाग | मैनेजरिड |
1001 | वैभवी | मिश्रा | 65500 | पुणे | ओरेकल | 1 |
1002 | वैभव | शर्मा | 60000 | नोएडा | सी# | 5 |
1003 | निखिल | वाणी | 50500 | जयपुर | FMW | 2 |
2001 | प्राची | शर्मा | 55500 | चंडीगढ़ | ओरेकल | 1 |
2002 | भावेश | जैन | 65500 | पुणे | FMW | 2 |
2003 | रुचिका | जैन | 50000 | मुंबई | सी# | 5 |
3001 | प्रानोटी | शेंडे | 55500 | पुणे | जावा | 3 |
3002 | अनुजा | WANRE | 50500 | जयपुर | FMW | 2 |
3003 | दीपम | जौहारी | 58500 | मुंबई | जावा | 3 |
4001 | राजेश | GOUD | 60500 | मुंबई | परीक्षण | 4 |
4002 | अश्विनी | बगत | 54500 | नोएडा | जावा | 3 |
4003 | रुचिका | अग्रवाल | 60000 | दिल्ली | ओरेकल | 1 |
5001 | ARCHIT | शर्मा | 55500 | दिल्ली | परीक्षण | 4 |
सहसंबद्ध उपश्रेणी का उपयोग करते हुए उच्चतम वेतन
एक सहसंबद्ध सबक्वेरी एक विशेष प्रकार की सबक्वेरी है, जहां सबक्वेरी मुख्य क्वेरी पर निर्भर करती है और मुख्य क्वेरी द्वारा लौटाई गई प्रत्येक पंक्ति के लिए निष्पादित की जाती है।
वाक्यविन्यास:
SELECT salary from employees e1WHERE N-1 = (SELECT COUNT (DISINCT salary) FROM employees e2 WHERE e2.salary > e1.salary)
जहां N को 23 या 4 नंबर से बदला जा सकता है।
उदाहरण 1: 4 उच्चतम वेतन खोजने के लिए एक प्रश्न लिखें:
SELECT employeeid, salary from employees e1WHERE 3 = (SELECT COUNT (DISTINCT salary) FROM employees e2 WHERE e2.salary > e1.salary)
जहां एन =4, एन -1:4 -1 =3.
तालिका से 4 उच्चतम वेतन
आउटपुट:
कर्मचारी | वेतन |
3003 | 58500 |
स्पष्टीकरण:
तालिका में डुप्लिकेट वेतन को संभालने के लिए विशिष्ट कीवर्ड है। एन उच्चतम वेतन की खोज के लिए, हम केवल गैर-डुप्लिकेट वेतन पर विचार करते हैं। उच्चतम वेतन का अर्थ है कि इससे अधिक कोई वेतन नहीं है। दूसरे सबसे ज्यादा वेतन का मतलब सिर्फ एक वेतन उससे ज्यादा है। तीसरे उच्चतम वेतन का अर्थ है केवल दो वेतन तीसरे वेतन से अधिक हैं, इसी तरह Nth उच्चतम वेतन का अर्थ है N-1 वेतन इससे अधिक है।
चौथा उच्चतम वेतन कर्मचारी आईडी 3003 का 58500 है।
उदाहरण 2:3 उच्चतम वेतन खोजने के लिए एक प्रश्न लिखें:
SELECT employeeid, salary from employees e1WHERE 3 - 1 = (SELECT COUNT (DISTINCT salary) FROM employees e2 WHERE e2.salary > e1.salary)
जहां एन =3, एन -1:3 -1 =2।
तालिका से दूसरा उच्चतम वेतन
आउटपुट:
कर्मचारी | वेतन |
1002 | 60000 |
4003 | 60000 |
दूसरा सबसे बड़ा वेतन दो कर्मचारी आईडी 1002 और कर्मचारी आईडी 4003 का 58500 है।
उदाहरण 3:5 उच्चतम वेतन खोजने के लिए एक प्रश्न लिखें:
SELECT employeeid, salary from employees e1WHERE 6 - 1 = (SELECT COUNT (DISTINCT salary) FROM employees e2 WHERE e2.salary > e1.salary)
जहां एन =6, एन -1:6 -1 =5।
तालिका से 5 उच्चतम वेतन
आउटपुट:
कर्मचारी | वेतन |
4002 | 54500 |
कर्मचारी आईडी 4002 का पांचवां उच्चतम वेतन 54500 है।
LIMIT कीवर्ड का उपयोग कर उच्चतम वेतन
वाक्यविन्यास:
SELECT salary FROM employees ORDER BY salary desc LIMIT N-1, 1;
उदाहरण 1: 2 उच्चतम वेतन खोजने के लिए एक प्रश्न लिखें।
SELECT employeeid, salary FROM employees ORDER BY salary desc LIMIT 1, 1;
आउटपुट:
कर्मचारी | वेतन |
2002 | 65500 |
प्रश्न में सीमा 1, 1 बताता है कि कितना उच्चतम वेतन प्रदर्शित किया जाना है।
अगर आप 1 लिखते हैं, तो 2 आउटपुट इस तरह होंगे
कर्मचारी | वेतन |
2002 | 65500 |
4001 | 60500 |
N TOP कीवर्ड का उपयोग कर उच्चतम वेतन
परिदृश्य कर्मचारियों की तालिका से एन उच्चतम कर्मचारी वेतन की गणना करना है। चरण इस प्रकार हैं:
1. तालिका से कर्मचारियों के TOP अद्वितीय वेतन की खोज करने के लिए पहला कदम है।
2. अगला कदम पहले चरण के परिणामस्वरूप सभी वेतनों के बीच न्यूनतम वेतन की गणना करना है। इस कदम से हमें एन उच्चतम वेतन मिलता है।
3. उपरोक्त चरणों के परिणाम से, उस कर्मचारी के विवरण की पहचान करें जिसका वेतन न्यूनतम वेतन है।
उदाहरण 1:
SELECT * FROM employees WHERE salary = (SELECT MIN(salary) FROM employees WHERE salary IN(SELECT DISTINCT TOP N salary from employees ORDER BY salary DESC ));
उपरोक्त SQL कथन का उपयोग उच्चतम वेतन वाले कर्मचारियों का विवरण खोजने के लिए किया जाता है।
आइए संक्षेप में उपरोक्त SQL कथन की व्याख्या देखें:
एन =4 पर विचार करें।
जब भी किसी SQL क्वेरी में उप-क्वेरी शामिल होती है, तो याद रखें कि आंतरिक क्वेरी पहले निष्पादित होगी फिर बाहरी क्वेरी निष्पादित की जाएगी।
निम्नलिखित परिणाम "सेलेक्ट डिस्टिंट टॉप एन सैलरी फ्रॉम एम्प्लॉइज ऑर्डर बाय सैलरी डीईएससी" क्वेरी द्वारा जनरेट किया जाएगा, जो निम्नलिखित परिणाम उत्पन्न करेगा।
वेतन |
65500 |
60500 |
60000 |
58500 |
अगली बाहरी क्वेरी है:"उन कर्मचारियों से मिन (वेतन) चुनें जहां वेतन (पिछली SQL क्वेरी का आउटपुट) है।
वेतन |
58500 |
उपरोक्त परिणाम से, यह सत्यापित होता है कि आवश्यक चौथा उच्चतम वेतन 58500 है।
अंत में, मुख्य प्रश्न कर्मचारियों से चुनें * जहां वेतन =पिछली SQL क्वेरी का आउटपुट है। इस प्रश्न का परिणाम चौथे उच्चतम वेतन वाले कर्मचारियों का परिणाम होगा।
FIRST_NAME | वेतन |
दीपम | 58500 |
उदाहरण 2:
SELECT * FROM employees WHERE salary = (SELECT MIN(salary) FROM employees WHERE salary IN(SELECT DISTINCT TOP N salary from employees ORDER BY salary DESC ));
उपरोक्त SQL कथन का उपयोग N उच्चतम वेतन वाले कर्मचारियों का विवरण खोजने के लिए किया जाता है।
आइए संक्षेप में उपरोक्त SQL कथन की व्याख्या देखें:
एन =5 पर विचार करें।
जब भी किसी SQL क्वेरी में उप-क्वेरी शामिल होती है, तो याद रखें कि आंतरिक क्वेरी पहले निष्पादित होगी फिर बाहरी क्वेरी निष्पादित की जाएगी।
निम्नलिखित परिणाम "सेलेक्ट डिस्टिंट टॉप एन सैलरी फ्रॉम एम्प्लॉइज ऑर्डर बाय सैलरी डीईएससी" क्वेरी द्वारा जनरेट किया जाएगा, जो निम्नलिखित परिणाम उत्पन्न करेगा।
वेतन |
65500 |
60500 |
60000 |
58500 |
55500 |
अगली बाहरी क्वेरी है:"उन कर्मचारियों से मिन (वेतन) चुनें जहां वेतन (पिछली SQL क्वेरी का आउटपुट) है।
वेतन |
55500 |
उपरोक्त परिणाम से, यह सत्यापित होता है कि आवश्यक पाँचवाँ उच्चतम वेतन 55500 है।
अंत में, मुख्य प्रश्न कर्मचारियों से चुनें * जहां वेतन =पिछली SQL क्वेरी का आउटपुट है। इस प्रश्न का परिणाम पांचवे उच्चतम वेतन वाले कर्मचारियों का परिणाम होगा।
FIRST_NAME | वेतन |
प्राची | 55500 |
Row_Num() फ़ंक्शन का उपयोग करके नौवां उच्चतम वेतन
उदाहरण:
SELECT MIN(salary) FROM(SELECT DISTINCT salary FROM employees ORDER BY salary DESC) WHERE rownum < 3;
- तीसरे उच्चतम वेतन की गणना करने के लिए, rownum <4 . का उपयोग करें
- दूसरा उच्चतम वेतन की गणना करने के लिए, rownum <3 . का उपयोग करें
आउटपुट:
मिनट(वेतन |
60500 |
आइए देखें कि क्वेरी कैसे काम करती है:
चरण 1: क्वेरी में सबक्वेरी का अर्थ है आंतरिक क्वेरी और बाहरी क्वेरी। हम सभी जानते हैं कि जब क्वेरी में सबक्वेरी का उपयोग किया जाता है, तो सबसे पहले आंतरिक क्वेरी को निष्पादित किया जाता है
सबसे पहले, आंतरिक क्वेरी को निष्पादित किया जाएगा फिर बाहरी क्वेरी को आंतरिक क्वेरी द्वारा उत्पादित आउटपुट के आधार पर निष्पादित किया जाएगा:
आंतरिक प्रश्न:
SELECT MIN(salary) FROM(SELECT DISTINCT salary FROM employees ORDER BY salary DESC) WHERE rownum < 3;
आंतरिक क्वेरी का आउटपुट:
वेतन |
65500 |
60500 |
60000 |
58500 |
55500 |
54500 |
50500 |
50000 |
जैसा कि हमने क्वेरी में एक अलग कीवर्ड का उपयोग किया है, डुप्लिकेट वेतन समाप्त हो जाएगा। आंतरिक क्वेरी के परिणाम के रूप में अद्वितीय वेतन प्रदर्शित किया जाएगा।
चरण 2: जैसा कि सर्वर एक आंतरिक क्वेरी के साथ किया जाता है, हम नेस्टेड क्वेरी की बाहरी क्वेरी को आंतरिक क्वेरी से प्राप्त आउटपुट में निष्पादित कर रहे हैं
SELECT MIN(salary) FROM(SELECT DISTINCT salary FROM employees ORDER BY salary DESC) WHERE rownum < 3;
सेलेक्ट मिन (वेतन) FROM (इनर क्वेरी आउटपुट):इनर क्वेरी आउटपुट से न्यूनतम वेतन का चयन करें, जो कि 50000 है और 50000 दूसरा सबसे ज्यादा वेतन नहीं है, जिसके कारण हमने राउनम <3 का उपयोग किया है, जो की संख्या देगा ऊपर से पंक्तियाँ जो 3 से कम हैं, का अर्थ केवल 2 है।
WHERE Rownum का आउटपुट <3:
वेतन |
65500 |
60500 |
चरण 3: क्वेरी का अंतिम भाग, जो कि SELECT MIN(वेतन) है (WHERE rownum का आउटपुट<3):
क्वेरी का अंतिम आउटपुट:
वेतन |
60500 |
60500 कर्मचारियों की मेज पर दूसरा सबसे बड़ा वेतन है।
रैंक रैंक () फ़ंक्शन का उपयोग करके नौवां उच्चतम वेतन
उदाहरण:
SELECT * FROM(SELECT First_Name, salary, dense_rank() OVER(ORDER BY salary DESC) rank FROM employees) WHERE rank =#
- तीसरे उच्चतम वेतन की गणना करने के लिए, संख्या =3 का उपयोग करें
- दूसरे उच्चतम वेतन की गणना करने के लिए, संख्या =2 का उपयोग करें
हम num =2 के लिए जाएंगे।
अंतिम आउटपुट:
प्रथम_नाम | वेतन | रैंक |
राजेश | 60500 | 2 |
ओ आंतरिक क्वेरी का आउटपुट:
SELECT(First_Name, Salary, dense_rank() OVER(ORDER BY salary DESC) Rank FROM employees
Dense_rank () फ़ंक्शन आरोही क्रम में पंक्तियों के क्रम समूह में प्रत्येक पंक्ति की रैंक की गणना करता है और रैंक को एक संख्या के रूप में लौटाता है। रैंक 1 से शुरू होती है और इसी तरह।
यदि दो या दो से अधिक पंक्तियों का वेतन समान है, तो यह सभी पंक्तियों को समान रैंक प्रदान करता है।
आंतरिक क्वेरी का आउटपुट:
प्रथम_नाम | वेतन | रैंक |
वैभवी | 65500 | 1 |
भावेश | 65500 | 1 |
राजेश | 60500 | 2 |
वैभव | 60000 | 3 |
रुचिका | 60000 | 3 |
दीपम | 58500 | 4 |
प्राची | 55500 | 5 |
प्रानोटी | 55500 | 5 |
ARCHIT | 55500 | 5 |
अश्विनी | 54500 | 6 |
निखिल | 50500 | 7 |
अनुजा | 50500 | 7 |
रुचिका | 50000 | 8 |
आउटपुट में, हम डुप्लिकेट वेतन के लिए समान रैंकिंग देख सकते हैं।
चरण 2: जैसा कि सर्वर एक आंतरिक क्वेरी के साथ किया जाता है, हम नेस्टेड क्वेरी की बाहरी क्वेरी को आंतरिक क्वेरी से प्राप्त आउटपुट में निष्पादित कर रहे हैं
SELECT * FROM(SELECT(First_Name, Salary, dense_rank() OVER(ORDER BY salary DESC) rank FROM employees) WHERE rank = #
चयन करें * से उन सभी पंक्तियों का चयन करेगा जो दूसरी उच्चतम वेतन नहीं हैं क्योंकि हमने रैंकरैंक का उपयोग किया है जहां num =2 उपयोगकर्ता द्वारा num के लिए दर्ज किए गए मान के अनुसार मिलान करने वाली पंक्तियां देगा।
जैसा कि हमने num =2 का उपयोग किया, आउटपुट होगा
प्रथम_नाम | वेतन | रैंक |
राजेश | 60500 | 2 |
- तीसरा वेतन सेट संख्या =3 खोजने के लिए,
- चौथा वेतन सेट संख्या =4, और इसी तरह खोजने के लिए।