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