Dette spørgsmål stilles for det meste på tidspunktet for samtalen fra de kandidater, der er friskere eller 1 års erfaring. Selv dette spørgsmål stillet fra mig kan nogle gange, da jeg kom i webudviklingsområdet.
Så jeg vil vise dig nogle mulige måder at finde 2. eller n. højeste løn.
For Exp:Employee Table(ET)
EID | Medarbejdernavn | Løn |
---|---|---|
1 | Medarbejder-1 | 20.000 |
2 | Medarbejder-2 | 22.000 |
3 | Medarbejder-3 | 21.000 |
4 | Medarbejder-4 | 19.000 |
5 | Medarbejder-5 | 21.000 |
1:- Sådan finder du nth højeste løn ingen betingelse
I dette tilfælde kan du bruge meget grundlæggende limit og max metoder for sql
SELECT DISTINCT(Salary) FROM ET ORDER BY Salary DESC LIMIT n-1,1
Hvor n er den stilling, du leder efter
Hvis n=2 vil forespørgsel blive
SELECT DISTINCT(state_id) FROM crm_cities ORDER BY state_id DESC LIMIT 1,1
Output vil være:21.000
2:- Sådan finder du alle n. højeste løn, hvor betingelsen er, at du skal finde alle 2. bedst betalte medarbejdere.
I dette tilfælde kan du bruge sub-query-funktionen i sql.
SELECT Salary FROM ET WHERE Salary = (SELECT DISTINCT(Salary) FROM ET ORDER BY Salary DESC LIMIT n-1,1)
Hvor n er den stilling, du leder efter
Hvis n=2 vil forespørgsel blive
SELECT Salary FROM ET WHERE Salary = (SELECT DISTINCT(Salary) FROM ET ORDER BY Salary DESC LIMIT 1,1)
Output vil være:21.000 , 21.000
3:- Sådan finder du 2. højeste løn uden at bruge LIMIT-betingelser.
I dette tilfælde kan du bruge NOT IN-betingelser i sql
SELECT MAX(Salary) FROM ET WHERE Salary NOT IN (SELECT MAX(Salary) FROM ET)
Output vil være:21.000
4:- Sådan finder du den 2. højeste løn uden at bruge LIMIT og Sub-Query
I dette tilfælde kan du bruge selvtilmeldingsmetoden
SELECT MAX( E1.Salary ) FROM ET E1, ET E2 WHERE E1.Salary < E2.Salary Output will be: 21,000
Håber dette vil hjælpe dig med at finde det rigtige svar efter dit behov.. 🙂