您的位置:首页 > 产品设计 > UI/UE

How to find second highest or maximum salary of Employee in SQL - Interview question

2013-11-17 21:44 267 查看
Employee is one of the most frequently asked SQLinterview question similar tofinding
duplicate records in table and
when to use truncate vs delete. There are many ways to find second highest salary based upon whichdatabase you are using as different database provides different feature which can
be used to findsecond maximum or Nth maximum salary of employee. Well this question can also be generalized with other scenario like finding second maximum age etc. In this SQLtutorial
we will see different example ofSELECT SQL query to find second highest salary independent of
databases or you may call in ANSI SQL and other SQL queries which uses database specific feature to find second maximum salary.

SQL query to find second maximum salary of Employee



In
this section we will write SQL query to get second highest salary of Employee. Beforewriting query its good to be familiar with schema as well as data in table. Here is the Employee
table we will be using this SQL example:

mysql>
SELECT
*FROM Employee;
+--------+----------+---------+--------+
| emp_id | emp_name| dept_id
| salary|
+--------+----------+---------+--------+
| 1
| James | 10|
2000 |
| 2
| Jack | 10|
4000 |
| 3
| Henry | 11|
6000 |
| 4
| Tom | 11|
8000 |
+--------+----------+---------+--------+
4 rows INSET
(0.00 sec)

If you look data, you will find that second maximum salary in this case is 6000 and employee name is Henry. Now let’s see some SQL example to find out this second maximum salary.

Second maximum salary using sub query and IN clause

Sub queries in SQL are great tool for this kind of scenario, here we first select maximum salary and then another maximum excluding result of subquery. Tolearn more about Subquery
seecorrelate and non-correlate subquery in SQL

mysql>
SELECT
max(salary)FROM Employee
WHERE salaryNOT
IN
(SELECT max(salary)FROM
Employee);
+-------------+
| max(salary)|
+-------------+
| 6000
|
+-------------+
1 row INSET
(0.00 sec)

Here is another SQL query to find second highest salary using subquery and < operator instead of IN clause:

mysql>
SELECT
max(salary)FROM Employee
WHERE salary<
(SELECT max(salary)FROM Employee);
+-------------+
| max(salary)|
+-------------+
| 6000
|
+-------------+
1 row INSET
(0.00 sec)

Both of above SQL example will work on all database including Oracle, MySQL, Sybase and SQLServer as they are written using standard SQL keywords. But sometime you can also use databas
4000
e
specific features like TOP keyword of SQL Server or Sybase database to find out second highest salary of Employee.

Second highest salary using TOP keyword of Sybase or SQL Server database

TOP keyword of Sybase and SQL Server database is used to select top
record or row of any result set, by carefully using TOP keyword you can find out second maximum or Nth maximum salary as shown below.

SELECT TOP1 salary
FROM(
SELECT TOP2 salary
FROMemployeesORDER
BY
salaryDESC)AS emp
ORDERBY salary
ASC

Here is what this SQL query is doing : First find out top 2 salary from Employee table and list them in descending order, Now second highest salary of employee is at top so just take that value. Though you need to keep in mind of using distinct keyword
if there are more than one employee with top salary, because in that case same salary will be repeated and TOP 2 may list same salary twice.

Second maximum salary using LIMIT keyword of MYSQL database

LIMIT keyword of MySQL database is little bit similar with TOP keyword of SQL Server database and allows to take only certain rows from result set. If you look at below SQL example, its very much similar to SQL Server TOP keyword example.

mysql>
SELECT
salary FROM(SELECT salaryFROM
Employee ORDERBY salary
DESCLIMIT
2)AS emp
ORDERBY salary
LIMIT1;
+--------+
| salary |
+--------+
| 6000
|
+--------+
1 row INSET
(0.00 sec)

That’s on How to find second highest salary of Employee using SQL query. This is good question which really test your SQL knowledge, its not tough but definitely tricky forbeginners.
As follow up question you can ask him to find third maximum salary or Nth maximum salary as well.

Other SQL Interview Question answers you may like

Read more: http://javarevisited.blogspot.com/2012/12/how-to-find-second-highest-or-maximum-salary-sql.html#ixzz2khph0MQr
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐