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

दूसरे उच्चतम वेतन वाले कर्मचारी को कैसे खोजें?

ऐसा करने का तरीका Oracle के विश्लेषणात्मक कार्यों के साथ है। आपका विशेष परिदृश्य मेरे द्वारा किसी अन्य सूत्र में दिए गए समाधान का एक रूप है।

यदि आप केवल दूसरे उच्चतम वेतन का चयन करने में रुचि रखते हैं तो DENSE_RANK(), RANK() और ROW_NUMBER() में से कोई भी काम करेगा:

SQL> select * from
  2   ( select sal
  3            , rank() over (order by sal desc) as rnk
  4     from
  5      ( select distinct sal
  6        from emp )
  7    )
  8  where rnk = 2
  9  /

       SAL        RNK
---------- ----------
      3000          2

SQL> 

हालांकि, यदि आप अतिरिक्त जानकारी का चयन करना चाहते हैं, जैसे कि दूसरे उच्चतम वेतन वाले कर्मचारी का नाम, तो आपके द्वारा चुना गया कार्य परिणाम को प्रभावित करेगा। एक को दूसरे के ऊपर चुनने का मुख्य कारण यह है कि टाई होने पर क्या होता है।

यदि आप ROW_NUMBER() का उपयोग करते हैं तो यह वेतन द्वारा आदेशित दूसरे कर्मचारी को वापस कर देगा:क्या होगा यदि दो कर्मचारी उच्चतम वेतन के लिए बाध्य हैं? क्या होगा यदि दो कर्मचारी दूसरे उच्चतम वेतन के लिए टाई कर रहे हैं? जबकि यदि आप RANK() का उपयोग करते हैं और दो कर्मचारी पहले उच्चतम वेतन के लिए काम कर रहे हैं, तो नहीं होगा रैंक =2 ​​के साथ रिकॉर्ड।

मेरा सुझाव है कि इन मामलों में चुनने के लिए DENSE_RANK() आमतौर पर सबसे सुरक्षित कार्य है, लेकिन यह वास्तव में विशिष्ट व्यावसायिक आवश्यकता पर निर्भर करता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle में संग्रहीत प्रक्रिया के लिए XML को पैरामीटर के रूप में कैसे पास करें?

  2. ORA-00918:चयन में अस्पष्ट रूप से परिभाषित स्तंभ *

  3. संग्रह विधि:Oracle डेटाबेस में DELETE प्रक्रिया

  4. Oracle डाटाबेस 20c नई सुविधाएँ

  5. Oracle में पिवट टेबल का उपयोग करने की सलाह