sql >> Databasteknik >  >> RDS >> Mysql

Hitta 2:a högsta lönen bästa möjliga sätt

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

Om du gillar det här inlägget, glöm inte att prenumerera på My Public Notebook för mer användbara saker.


  1. Android - Hur kan jag skicka data relaterade till två tabeller till en insättningsmetod hos en innehållsleverantör

  2. Returnera partitionsnumret för varje rad när du frågar efter en partitionerad tabell i SQL Server (T-SQL)

  3. Returnera en lista över partitionsscheman i SQL Server (T-SQL)

  4. Är mysql_insert_id säkert att använda?