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

मैं डेटाबेस Oracle में दूसरे उच्चतम वेतन के साथ रिकॉर्ड का चयन कैसे कर सकता हूं?

RANK और DENSE_RANK का सुझाव पहले ही दिया जा चुका है - आपकी आवश्यकताओं के आधार पर, आप ROW_NUMBER() पर भी विचार कर सकते हैं:

select * from (
  select e.*, row_number() over (order by sal desc) rn from emp e
)
where rn = 2;

RANK(), DENSE_RANK() और ROW_NUMBER() के बीच का अंतर निम्न तक होता है:

  • ROW_NUMBER() हमेशा एक अद्वितीय रैंकिंग उत्पन्न करता है; यदि ORDER BY खंड दो पंक्तियों के बीच अंतर नहीं कर सकता है, तब भी यह उन्हें अलग-अलग रैंकिंग (बेतरतीब ढंग से) देगा
  • RANK() और DENSE_RANK() उन पंक्तियों को समान रैंकिंग देंगे जिन्हें ORDER BY क्लॉज द्वारा अलग नहीं किया जा सकता है
  • DENSE_RANK() हमेशा रैंकों का एक सन्निहित अनुक्रम उत्पन्न करेगा (1,2,3,...), जबकि RANK() समान रैंक वाली दो या अधिक पंक्तियों के बाद अंतराल छोड़ देगा (सोचें "ओलंपिक खेल":यदि दो एथलीटों ने जीता स्वर्ण पदक, कोई दूसरा स्थान नहीं, केवल तीसरा)

इसलिए, यदि आप केवल एक कर्मचारी चाहते हैं (भले ही दूसरे उच्चतम वेतन वाले कई कर्मचारी हों), तो मैं ROW_NUMBER() की अनुशंसा करता हूं।



  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:एक समग्र कुंजी बनाएं जिसमें तीन Forgin कुंजियाँ हों

  2. शालीनता की ओर जाता है:जोखिम वास्तविकता बन जाता है

  3. डेटाबेस केस असंवेदनशील सूचकांक?

  4. इस क्वेरी को तत्काल तत्काल चलाने से यह विफल क्यों हो जाता है?

  5. जावा में पैकेज-स्तरीय सहयोगी सरणी बनाना