Denna fråga ställs oftast vid tidpunkten för intervjun från kandidater som är färskare eller 1 års erfarenhet. Till och med den här frågan från mig kan tillfällen när jag kom inom webbutvecklingsområdet.
Så jag ska visa dig några möjliga sätt att hitta 2:a eller n:e högsta lönen.
För Exp:Employee Table(ET)
EID | Anställd | Lön |
---|---|---|
1 | Anställd-1 | 20 000 |
2 | Anställd-2 | 22 000 |
3 | Anställd-3 | 21 000 |
4 | Anställd-4 | 19 000 |
5 | Anställd-5 | 21 000 |
1:- Hur man hittar den n:e högsta lönen utan villkor
I det här fallet kan du använda mycket grundläggande limit och max metoder för sql
SELECT DISTINCT(Salary) FROM ET ORDER BY Salary DESC LIMIT n-1,1
Där n är positionen du letar efter
Om n=2 kommer fråga att bli
SELECT DISTINCT(state_id) FROM crm_cities ORDER BY state_id DESC LIMIT 1,1
Resultatet blir:21 000
2:- Hur man hittar alla n:e högsta löner där villkoret är att du måste hitta alla 2:a högst betalda anställda.
I det här fallet kan du använda subquery-funktionen i sql.
SELECT Salary FROM ET WHERE Salary = (SELECT DISTINCT(Salary) FROM ET ORDER BY Salary DESC LIMIT n-1,1)
Där n är positionen du letar efter
Om n=2 kommer fråga att bli
SELECT Salary FROM ET WHERE Salary = (SELECT DISTINCT(Salary) FROM ET ORDER BY Salary DESC LIMIT 1,1)
Resultatet blir:21 000 , 21 000
3:- Hur hittar du 2:a högsta lönen utan att använda LIMIT-villkor.
I det här fallet kan du använda NOT IN-villkor i sql
SELECT MAX(Salary) FROM ET WHERE Salary NOT IN (SELECT MAX(Salary) FROM ET)
Resultatet blir:21 000
4:- Hur man hittar den 2:a högsta lönen utan att använda LIMIT och Sub-Query
I det här fallet kan du använda metoden för självanslutning
SELECT MAX( E1.Salary ) FROM ET E1, ET E2 WHERE E1.Salary < E2.Salary Output will be: 21,000
Hoppas detta hjälper dig att hitta det rätta svaret efter ditt behov.. 🙂