Deze vraag wordt meestal gesteld tijdens het interview van de kandidaten die eerstejaars zijn of 1 jaar ervaring hebben. Zelfs deze vraag die van mij werd gesteld, kan soms zijn geweest toen ik een nieuwkomer was op het gebied van webontwikkeling.
Dus ik ga je enkele mogelijke manieren laten zien om het 2e of nth hoogste salaris te vinden.
Voor Exp:Werknemerstabel (ET)
EID | Naam medewerker | Salaris |
---|---|---|
1 | Werknemer-1 | 20.000 |
2 | Werknemer-2 | 22.000 |
3 | Werknemer-3 | 21.000 |
4 | Medewerker-4 | 19.000 |
5 | Werknemer-5 | 21.000 |
1:- Hoe het op één na hoogste salaris te vinden, geen voorwaarde
In dit geval kunt u de zeer eenvoudige limiet- en max-methoden van sql gebruiken
SELECT DISTINCT(Salary) FROM ET ORDER BY Salary DESC LIMIT n-1,1
Waarbij n de positie is waarnaar u op zoek bent
Als n=2 zoekopdracht wordt
SELECT DISTINCT(state_id) FROM crm_cities ORDER BY state_id DESC LIMIT 1,1
De output zal zijn:21.000
2:- Hoe u al het op één na hoogste salaris kunt vinden waarbij de voorwaarde is dat u alle op één na best betaalde werknemers moet vinden.
In dit geval kunt u de subquery-functie van sql gebruiken.
SELECT Salary FROM ET WHERE Salary = (SELECT DISTINCT(Salary) FROM ET ORDER BY Salary DESC LIMIT n-1,1)
Waarbij n de positie is waarnaar u op zoek bent
Als n=2 zoekopdracht wordt
SELECT Salary FROM ET WHERE Salary = (SELECT DISTINCT(Salary) FROM ET ORDER BY Salary DESC LIMIT 1,1)
De output zal zijn:21.000 , 21.000
3:- Hoe het 2e hoogste salaris te vinden zonder LIMIT-voorwaarden te gebruiken.
In dit geval kunt u NOT IN-voorwaarden in sql gebruiken
SELECT MAX(Salary) FROM ET WHERE Salary NOT IN (SELECT MAX(Salary) FROM ET)
De output zal zijn:21.000
4:- Hoe het 2e hoogste salaris te vinden zonder LIMIT en Sub-Query te gebruiken
In dit geval kunt u de self-join-methode gebruiken
SELECT MAX( E1.Salary ) FROM ET E1, ET E2 WHERE E1.Salary < E2.Salary Output will be: 21,000
Ik hoop dat dit je zal helpen om het juiste antwoord te vinden als je dat nodig hebt.. 🙂