2010-02-24 10 views
9

Czy istnieje komenda zbliżona do:Jak znaleźć n-tą najwyższą wartość kolumny?

  • 2nd highest salary from tbl_salary lub

  • 4th highest salary from tbl_salary?

widziałem:

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

Jak to działa?

Czy są inne proste sposoby na uzyskanie wyniku?

+2

zobacz także: http://stackoverflow.com/questions/80706 –

+0

Zobacz także: http://stackoverflow.com/questions/2255964/obtain-value-preceding-maximum-value –

Odpowiedz

12

Jeśli jest to podstawowy kwerendy, a następnie po prostu użyć limit:

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

, a jeśli nie jest to podstawowe zapytanie to? – diEcho

+0

cóż, jeśli to nie jest wyprowadzone pole lub cokolwiek (np .: Chcę znaleźć zapis użytkownika osoby, która opublikowała 5 najbardziej artykułów) ta metoda będzie działać dobrze. Później prawdopodobnie chodzi o użycie podkwerendy. – nickf

+3

@nickf, otrzymuję 5. najwyższy wynik, wykonując powyższe zapytanie! Limit 3,1 będzie na 4. miejscu, prawda? Proszę doradzić – nu6A

2

Można to zrobić za pomocą klauzuli LIMIT:

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

czy to nie jest tylko wyrocznia? – nickf

+0

Tak, masz rację, dzięki. Właśnie zmieniłem moją odpowiedź. – road242

2

Jestem pewien, że istnieje lepszy sposób to zrobić, ale:

SELECT Wynagrodzenie od tbl_salary ORDER BY wynagrodzenia DESC LIMIT n, 1

gdzie n oznacza pozycję chcesz - 1 (tj dostać drugą najwyższą pensję byłoby LIMIT 1,1)

+0

za pomocą słowa kluczowego 'DISTINCT' udzieli dokładnej odpowiedzi ... m i tak? – diEcho

+0

@ Like PHP: Jeśli twoja tabela zawiera duplikaty pensji, tak. Lub możesz użyć wynagrodzenia GROUP BY – jasonbar

6

// dla najwyższego wynagrodzenia tabeli

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

// dla drugiego najwyższego wynagrodzenia

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

Korzystanie z tej kwerendy uzyskać numer ntą wynagrodzenia z tabeli ....

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

Opis: limit x,y

  • x: Przesunięcie wiersza, od którego chcesz rozpocząć wyświetlanie rekordów. Dla n-tego rekordu będzie to n-1.
  • y: Liczba rekordów, które chcesz wyświetlić. (Zawsze 1 w tym przypadku)
+0

Dziękuję za wysiłek, ale nie ma sensu odpowiadać na 2,5-letnie pytanie, które ma również zaakceptowaną odpowiedź. – fancyPants

+1

@ wyjaśnienie składni ombom –

1

SELECT sal od zamówienia emp od SAL limitu malejąco 1,1

4

Oto bardzo prosty sposób, aby uzyskać wynik n'th najwyższej wartości

put n = 2, aby uzyskać drugie najwyższe wynagrodzenie
pur n = 4, aby uzyskać czwartą najwyższą pensję
i tak dalej ...

Oto zapytanie
jeśli n = 2

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

Najlepszy traf

0

Najprostszy Wdrażanie,

(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; 
Powiązane problemy