sql >> Database >  >> RDS >> Mysql

Vind de op één na hoogste salaris best mogelijke manieren

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

Als je dit bericht leuk vindt, vergeet dan niet je te abonneren op My Public Notebook voor meer nuttige dingen.


  1. .NET op Linux verbinden met een ODBC-gegevensbron

  2. String tot nu toe in Oracle met milliseconden

  3. RONDE(datum) Functie in Oracle

  4. Bestaat / bestaat niet:'selecteer 1' vs 'selecteer veld'