Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Znajdź drugą najwyższą pensję w najlepszy możliwy sposób

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. 🙂

Jeśli podoba Ci się ten post, nie zapomnij zasubskrybować My Public Notebook, aby uzyskać więcej przydatnych rzeczy.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql, iteruj przez nazwy kolumn

  2. Usuń zapytanie, aby usunąć wiersze w MySQL

  3. Odpytywanie schematu informacyjnego MySQL:Dlaczego? Jak?

  4. jak rzutować szesnastkowy na varchar(datetime)?

  5. SERWER SQL — SQL_NO_CACHE i OPTION (RECOMPILE)