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

वेतन तालिका से वां उच्चतम वेतन खोजने के लिए SQL क्वेरी

उत्तर प्राप्त करने के लिए आप कॉमन टेबल एक्सप्रेशन (CTE) का उपयोग कर सकते हैं।

मान लें कि तालिका में आपके पास निम्न वेतन हैं वेतन:

 EmployeeID  Salary
--------------------
     10101   50,000
     90140   35,000
     90151   72,000
     18010   39,000
     92389   80,000

हम उपयोग करेंगे:

DECLARE @N int
SET @N = 3  -- Change the value here to pick a different salary rank

SELECT Salary
FROM (
    SELECT row_number() OVER (ORDER BY Salary DESC) as SalaryRank, Salary
    FROM Salaries
) as SalaryCTE
WHERE SalaryRank = @N

वेतन द्वारा अवरोही क्रम में क्रमबद्ध करने के बाद यह प्रत्येक पंक्ति के लिए एक पंक्ति संख्या बनाएगा, फिर तीसरी पंक्ति को पुनः प्राप्त करेगा (जिसमें तीसरा उच्चतम रिकॉर्ड होता है)।

  • एसक्यूएल फिडल

आप में से जो सीटीई नहीं चाहते हैं (या एसक्यूएल 2000 में फंस गए हैं):

[नोट :यह उपरोक्त उदाहरण से काफी खराब प्रदर्शन करता है; निष्पादन योजनाओं के साथ-साथ उन्हें चलाने से सीटीई के लिए 36% और सबक्वेरी के लिए 64% की क्वेरी लागत दिखाई देती है]:

SELECT TOP 1 Salary
FROM 
(
    SELECT TOP N Salary
    FROM Salaries
    ORDER BY Salary DESC
) SalarySubquery
ORDER BY Salary ASC

जहां एन आपके द्वारा परिभाषित किया गया है।

SalarySubquery वह उपनाम है जो मैंने सबक्वेरी को दिया है, या क्वेरी जो कोष्ठक में है।

सबक्वेरी क्या करती है यह शीर्ष एन वेतन का चयन करती है (हम कहेंगे 3 इस मामले में), और उन्हें सबसे बड़े वेतन से आदेश देता है।

अगर हम तीसरा सबसे ज्यादा वेतन देखना चाहते हैं, तो सबक्वायरी वापस आ जाएगी:

 Salary
-----------
80,000
72,000
50,000

बाहरी क्वेरी तब सबक्वायरी से पहले वेतन का चयन करती है, सिवाय इसके कि हम इसे इस बार आरोही क्रम में क्रमबद्ध कर रहे हैं, जो कि सबसे छोटे से सबसे बड़े क्रम में होता है, इसलिए 50,000 आरोही क्रम में पहला रिकॉर्ड होगा।

जैसा कि आप देख सकते हैं, उदाहरण में 50,000 वास्तव में तीसरा सबसे अधिक वेतन है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर प्रबंधन स्टूडियो (SSMS)

  2. मैं SQL सर्वर में किसी निश्चित तिथि से बड़ी सभी तिथियों के लिए क्वेरी कैसे करूं?

  3. सर्वर पर MSDTC 'सर्वर अनुपलब्ध है'

  4. SQL सर्वर में SYSUTCDATETIME () बनाम GETUTCDATE ():क्या अंतर है?

  5. SQL सर्वर में LEFT () बनाम SET TEXTSIZE:क्या अंतर है?