Mysql
 sql >> Database >  >> RDS >> Mysql

Trova il secondo stipendio più alto nel miglior modo possibile

Questa domanda viene posta principalmente al momento del colloquio dai candidati che sono matricole o con 1 anno di esperienza. Anche questa domanda mi è stata posta molte volte quando ero nel campo dello sviluppo web.

Quindi ti mostrerò alcuni modi possibili per trovare il secondo o l'ennesimo stipendio più alto.


Per Exp:Tabella dei dipendenti(ET)

EID EmployeeName Stipendio
1 Dipendente-1 20.000
2 Dipendente-2 22.000
3 Dipendente-3 21.000
4 Dipendente-4 19.000
5 Dipendente-5 21.000

1:- Come trovare l'ennesimo stipendio più alto senza condizioni
In questo caso puoi utilizzare i metodi limite e massimo di sql molto semplici

SELECT DISTINCT(Salary) FROM ET ORDER BY Salary DESC LIMIT n-1,1

Dove n è la posizione che stai cercando
Se n=2 la query diventerà

SELECT DISTINCT(state_id) FROM crm_cities ORDER BY state_id DESC LIMIT 1,1

L'output sarà:21.000

2:- Come trovare l'ennesimo stipendio più alto dove la condizione è che devi trovare tutti i 2 dipendenti più pagati.
In questo caso puoi utilizzare la funzione di query secondaria di sql.

SELECT Salary FROM ET WHERE Salary = (SELECT DISTINCT(Salary) FROM ET ORDER BY Salary DESC LIMIT n-1,1)

Dove n è la posizione che stai cercando
Se n=2 la query diventerà

SELECT Salary FROM ET WHERE Salary = (SELECT DISTINCT(Salary) FROM ET ORDER BY Salary DESC LIMIT 1,1)

L'output sarà:21.000 , 21.000

3:- Come trovare il secondo stipendio più alto senza utilizzare le condizioni LIMIT.
In questo caso puoi utilizzare le condizioni NOT IN in sql

SELECT MAX(Salary) FROM ET
WHERE Salary NOT IN (SELECT MAX(Salary) FROM ET)

L'output sarà:21.000

4:- Come trovare il 2° stipendio più alto senza usare LIMIT e Sub-Query
In questo caso puoi usare il metodo di self-join

SELECT MAX( E1.Salary ) FROM ET E1, ET E2 WHERE E1.Salary < E2.Salary
Output will be: 21,000

Spero che questo ti aiuterà a trovare la risposta giusta alle tue esigenze.. 🙂

Se ti piace questo post, non dimenticare di iscriverti al mio taccuino pubblico per altre cose utili.