2010-02-24 12 views
9

वहाँ एक आदेश जैसा है करने के लिए:कॉलम का n'th उच्चतम मूल्य कैसे खोजें?

  • 2nd highest salary from tbl_salary या

  • 4th highest salary from tbl_salary?

मैंने देखा है:

select salary 
from tbl_salary t 
where &n = (
    select count(salary) 
    from(
     select distinct salary 
     from tbl_salary 
    )where t.salary<=salary 
); 

यह कैसे यह काम करता है करता है?

क्या परिणाम प्राप्त करने के अन्य आसान तरीके हैं? , द्वारा वेतन DESC में LIMIT n tbl_salary आदेश से

चयन वेतन:

+2

देखना भी: http://stackoverflow.com/questions/80706 –

+0

यह भी देखें: http://stackoverflow.com/questions/2255964/obtain-value-preceding- अधिकतम-value –

उत्तर

12

, तो बस उपयोग को सीमित:

-- get the 4th highest salary 
SELECT salary FROM tbl_salary 
ORDER BY salary DESC 
LIMIT 3,1 
+0

का उपयोग कर सकते हैं और यदि यह मूलभूत क्वेरी नहीं है तो? – diEcho

+0

अच्छी तरह से यदि यह व्युत्पन्न क्षेत्र या कुछ भी नहीं है (उदाहरण: मैं उस व्यक्ति का उपयोगकर्ता रिकॉर्ड ढूंढना चाहता हूं जिसने 5 वें सबसे अधिक लेख पोस्ट किए हैं) यह विधि ठीक काम करेगी। उसके बाद, यह शायद एक सबक्वायरी का उपयोग करने का मामला है। – nickf

+3

@nickf, मुझे उपर्युक्त क्वेरी निष्पादित करके 5 वां उच्चतम प्राप्त हो रहा है! '3,1 'सीमा 4 वें उच्चतम मिलेगी, क्या मैं सही हूँ? कृपया – nu6A

2

आप इसे सीमा खंड का उपयोग कर सकते हैं:

select * from tbl_salary order by salary desc limit 2,1; 
+2

क्या यह केवल ओरेकल नहीं है? – nickf

+0

हाँ आप सही हैं, धन्यवाद। बस मेरा जवाब बदल दिया। कीवर्ड 'DISTINCT' का उपयोग कर – road242

2

मुझे यकीन है कि वहाँ यह करने के लिए एक बेहतर तरीका है हूँ, लेकिन 1

जहाँ n स्थिति आप चाहते है - 1 (यानी दूसरे सबसे अधिक वेतन सीमित किया जाएगा 1,1 पाने के लिए) यदि यह एक बुनियादी सवाल है

+0

सटीक उत्तर देगा ... मैं सही हूँ? – diEcho

+0

@ मैं PHP की तरह: यदि आपकी तालिका में डुप्लिकेट वेतन हैं, हां। या आप GROUP BY वेतन – jasonbar

6

// तालिका

select salary from table order by salary desc limit 0,1 

// दूसरे सबसे अधिक वेतन के लिए

select salary from table order by salary desc limit 1,1 

की सबसे अधिक वेतन के लिए इस क्वेरी का उपयोग करके आप मेज से वेतन के n वें नंबर मिल ....

6
select * from employee order by salary desc limit 1,1 

विवरण: limit x,y

  • x: पंक्ति ऑफ़सेट जिसमें से आप रिकॉर्ड प्रदर्शित करना शुरू करना चाहते हैं। एनएच रिकॉर्ड के लिए यह एन -1 होगा।
  • वाई: रिकॉर्ड की संख्या जिन्हें आप प्रदर्शित करना चाहते हैं। (हमेशा 1 इस मामले में)
+0

आपके प्रयास के लिए धन्यवाद, लेकिन 2.5 वर्षीय प्रश्न का उत्तर देने में कोई बात नहीं है, जिसमें एक स्वीकार्य उत्तर भी है। – fancyPants

+1

@ टॉम्बॉम सिंटैक्स स्पष्टीकरण –

1

साल की वर्णन सीमा से रोजगार आदेश से चयन साल 1,1

4
यहाँ

n'th उच्चतम मूल्य

पुट का परिणाम प्राप्त करने के लिए एक बहुत ही सरल तरीका है एन = 2 दूसरे उच्चतम वेतन प्राप्त करने के लिए
pur n = 4 चौथा सबसे अधिक वेतन प्राप्त करने के लिए
और इसी तरह ...

क्वेरी
है अगर एन = 2

select salary from tbl_salary e1 
where 2 = (
select distinct(count(salary)) 
from tbl_salary e2 
where e1.salary< e2.salary 
) 

बेस्ट भाग्य

0

सरल कार्यान्वयन,

(select * from tbl_salary order by salary desc limit 5) order by salary limit 1; 


(select * from tbl_salary order by salary desc limit 2) order by salary limit 1; 
संबंधित मुद्दे