Categories: SQL Complex Queries

How to find second highest salary in SQL step by step?

In my previous articles I have given the way to write the complex sql queries. In this article I would like to focus on multiple ways to find second highest salary of employee in SQL. This is most asked interview question in SQL related interviews. I would like to throw light on multiple queries with its stepwise explanation.

Query to Find second highest Salary Of Employee one of the most commonly asked question in SQL interviews:

Answer:

     select distinct salary from Empoyee e1 where 2 = (select count(distinct salary) from Employee e2 where  e1.salary <= e2.salary);

CLICK HERE TO GET 20 COMPLEX SQL QUERIES IMPORTANT FOR INTERVIEW

  Explanation of Query for example :

1.Distinct keyword:–>The Distinct keyword is very useful keyword which will eliminate duplicates and fetches the Result.

2.Aliases–> Alias is nothing but the obfuscation technique to protect the real names of database fields

3.Count()–>Count() function is used to count the records in the table.

Step 1: So to understand the above query we will start with simple select statement. for Example,

                Select * from Employee;

Simultaneously you can see example of select statement here 

Output:

Employee_num Employee_name Department Salary
1 Amit OBIEE 680000
2 Rohan OBIEE 550000
3 Rohit OBIEE 430000


Here our intention is to fetch the record where salary is 2nd highest.

Step 2 :We will fetch the distinct Salary of employee and give the alias to it. For instance ,

Select distinct Salary from Employee e1;

Output:

Salary
680000
550000
430000

Step 3 :We need to calculate 2nd highest salary.So we need to get the count of all distinct salaries. To illustrate this ,

Select count(distinct Salary) from Employee e2;

Output: 

 3

Step 4 :We actually need to calculate 2nd highest salary.So we will modify the Step 2 query and Step3 Query: Below is example,

Select distinct Salary from Employee e1 where 2=

Select count(distinct Salary) from Employee e2 where e1.salary<=e2.salary;

Output:

550000

The above query will give us the 2nd highest salary of employee. Hope you will understand the logic behind fetching the second highest salary. There are other ways to find 2nd highest salary of employee using rank and dense_rank function.

Other ways to find 2nd highest salary:

Query 1:

SELECT max(e1.sal), e1.deptno FROM s_emp e1 WHERE sal < (SELECT max(sal) FROM s_emp e2 WHERE e2.deptno = e1.deptno) GROUP BY e1.deptno;

Query 2:

SELECT * FROM (SELECT S.*,DENSE_RANK() OVER (PARTITION BY DNO ORDER BY SALARY DESC) DR FROM SOURCE ) S WHERE S.DR=2;

Query 3:

Select Name From Employees Where Salary =

(Select Distinct Top(1) Salary from Employees where Salary Not In

(Select Dustinct Top(1) Salary from Employees Order By Salary Descending) Order by Salary Descending);

There are some other ways of calculating the second highest salary in different DBMS i.e. Oracle,Mysql,Postgresql:

Type 1 : Using correlated subquery:

SELECT name, salary FROM Employee e1 WHERE N-1 = (SELECT COUNT(DISTINCT salary) FROM Employee e2 WHERE e2.salary > e1.salary)SELECT name, salary FROM Employee e1 WHERE 2-1 = (SELECT COUNT(DISTINCT salary) FROM #Employee e2 WHERE e2.salary > e1.salary);

Using this method of finding out the second highest salary is slow because of the execution of inner query again and again.

Type 2: Microsoft SQL Server (Using Top Function)

SELECT TOP 1 salary FROM ( SELECT DISTINCT TOP N salary FROM Employee ORDER BY salary DESC ) AS temp ORDER BY salary;

Type3 : Mysql (using limit Clause)

SELECT salary FROM Employee ORDER BY salary DESC LIMIT 1,1;

Type 4: Oracle Function (using rownum function)

SELECT Salary FROM ( SELECT e.Salary, ROW_NUMBER() OVER (ORDER BY salary DESC) rn FROM Employee e ) WHERE rn = 2;

Type 5 : One of the website reader has suggested this solution Solution of Gautam Roy :

select * from OrderDetails a where a.Quantity < (select max(b.Quantity) from OrderDetails b) order by a.Quantity DESC limit 1;

Type 6 :However  another Reader as given the below as to illustrate,

name       sal
———-  ———————
x             120.00
y             140.00
z             200.00
p            400.00

select max(sal) as maxsalary from salary where sal < ( select max(sal) as maxsalary from salary );

Output :

maxsalary

——————

200.00

You can try this also for getting results easy accordingly,

Type 7 : Suggested by one of the Reader Selva Saleen for example :

select salary from (select rownum row_num,salary from (select * from EMPLOYEE E order by E.salary desc))where row_num=2;

Type 8 : Find Nth Highest Salary using Limit Keyword Suggested by Reader named Dinesh Singh for example  :

Select name, salary from employee order by salary desc limit(1,n-1);

Type 9 :The next  New Solution  suggested by reader named Victor for example :

select distinct e2.salary
from (select A.Employee_num , A.salary , count(distinct B.salary) as salary_distinct_rank
from Employee A
left join
Employ B
where B.salary <= A.salary
group by A.Employee_num, A.salary ) e2
where e2.salary_distinct_rank = 2 ;

Type 10 : New Solution suggested by reader named Nikhita:

Select TOP 1 Salary from Employee where Salary<(Select max(Salary) from Employee);

These are above methods to calculate 2nd highest salary of Employee.If you like this article then don’t forget to share it.

CLICK HERE TO GET INFORMATION ABOUT TECH MAHINDRA  INTERVIEW QUESTIONS

I hope you like this article and the article is useful to find second highest salary in multiple ways. If you like this article or if you have any issues with the same kindly comment in comments section.

Amit S

Oracle Consultant with vast experience in Oracle BI and PL/SQL Development. Amiet is the admin head of this website who contributes by preparing tutorials and articles related to database technologies. He is responsible to manage the content and front-end of the website.

Share
Published by
Amit S

Recent Posts

The Essential Guide to Cryptocurrency Exchange Platform Development for Beginners and Beyond

Introduction Cryptocurrencies took the world by storm, setting up a new financial system and breaking…

5 months ago

Top 20 System Administrator Interview Questions and answers

In my previous article I have given Top 20 technical support interview questions with its…

8 months ago

Desktop Support Scenario Based Interview Questions

In my previous articles I have given 15 most asked desktop support interview questions with…

8 months ago

How Do Business Analysts Use SQL for Their Needs?

A business analyst is someone who is versed in processes of data analysis used for…

8 months ago

Top 15 Control-M Interview Questions with Answers

In my previous article I have already given top questions and answers for Desktop support…

8 months ago

Top 20 SQL Interview Questions for Production Support

In my previous article I have given unix production support interview questions and answers. In…

8 months ago