To pytanie najczęściej zadają w czasie rozmowy kwalifikacyjnej kandydaci, którzy są nowicjuszami lub mają roczne doświadczenie. Nawet to pytanie zadawane przeze mnie może czasami, gdy zajmowałem się tworzeniem stron internetowych.
Pokażę więc kilka możliwych sposobów na znalezienie drugiej lub n-tej najwyższej pensji.
Dla Exp:Tabela pracowników (ET)
EID | Nazwa pracownika | Wynagrodzenie |
---|---|---|
1 | Pracownik-1 | 20.000 |
2 | Pracownik-2 | 22 000 |
3 | Pracownik-3 | 21 000 |
4 | Pracownik-4 | 19 000 |
5 | Pracownik-5 | 21 000 |
1:- Jak znaleźć n-tą najwyższą pensję bez warunku
W tym przypadku możesz użyć bardzo podstawowych metod limitu i max w sql
SELECT DISTINCT(Salary) FROM ET ORDER BY Salary DESC LIMIT n-1,1
Gdzie n jest pozycją, której szukasz
Jeśli n=2 zapytanie stanie się
SELECT DISTINCT(state_id) FROM crm_cities ORDER BY state_id DESC LIMIT 1,1
Wynik wyniesie:21 000
2:- Jak znaleźć wszystkie n-te najwyższe zarobki, jeśli warunkiem jest znalezienie wszystkich 2-gich najlepiej opłacanych pracowników.
W tym przypadku możesz użyć funkcji zapytania podrzędnego sql.
SELECT Salary FROM ET WHERE Salary = (SELECT DISTINCT(Salary) FROM ET ORDER BY Salary DESC LIMIT n-1,1)
Gdzie n jest pozycją, której szukasz
Jeśli n=2 zapytanie stanie się
SELECT Salary FROM ET WHERE Salary = (SELECT DISTINCT(Salary) FROM ET ORDER BY Salary DESC LIMIT 1,1)
Dane wyjściowe wyniosą:21 000 , 21 000
3:- Jak znaleźć drugą najwyższą pensję bez używania warunków LIMIT.
W tym przypadku możesz użyć warunków NOT IN w sql
SELECT MAX(Salary) FROM ET WHERE Salary NOT IN (SELECT MAX(Salary) FROM ET)
Wynik wyniesie:21 000
4:- Jak znaleźć drugą najwyższą pensję bez użycia LIMIT i podzapytania
W tym przypadku możesz użyć metody samodzielnego dołączania
SELECT MAX( E1.Salary ) FROM ET E1, ET E2 WHERE E1.Salary < E2.Salary Output will be: 21,000
Mam nadzieję, że pomoże to w znalezieniu właściwej odpowiedzi zgodnie z potrzebami. 🙂