w3resource

SQL Challenges-1: Find the 2nd highest salary among employees

SQL Challenges-1: Exercise-76 with Solution

From the following table write a query in SQL to find the 2nd highest salary of employees.

Table: employees

Structure:

FieldTypeNullKeyDefaultExtra
employee_idintNOPRI
emp_namevarchar(25)YES
hire_datedateYES
job_idvarchar(25)YES
salarydecimal(10,2)YES
manager_idintYES
department_idintYES

Data:

employee_idemp_namehire_datejob_idsalarymanager_iddepartment_id
100Steven1987-06-17AD_PRES24000.00090
101Neena1987-06-18AD_VP17000.0010090
102Lex1987-06-19AD_VP17000.0010090
103Alexander1987-06-20IT_PROG9000.0010260
104Bruce1987-06-21IT_PROG6000.0010360
105David1987-06-22IT_PROG4800.0010360
106Valli1987-06-23IT_PROG4800.0010360
107Diana1987-06-24IT_PROG4200.0010360
108Nancy1987-06-25FI_MGR12000.00101100
109Daniel1987-06-26FI_ACCOUNT9000.00108100
110John1987-06-27FI_ACCOUNT8200.00108100
111Ismael1987-06-28FI_ACCOUNT7700.00108100
112Jose Manuel1987-06-29FI_ACCOUNT7800.00108100
113Luis1987-06-30FI_ACCOUNT6900.0010830
114Den1987-07-01PU_MAN11000.0010030
115Alexander1987-07-02PU_CLERK3100.0011430
116Shelli1987-07-03PU_CLERK2900.0011430
117Sigal1987-07-04PU_CLERK2800.0011450
133Jason1987-07-20ST_CLERK3300.0012250
134Michael1987-07-21ST_CLERK2900.0012250
135Ki1987-07-22ST_CLERK2400.0012250
136Hazel1987-07-23ST_CLERK2200.0012250
137Renske1987-07-24ST_CLERK3600.0012350
138Stephen1987-07-25ST_CLERK3200.0012350
139John1987-07-26ST_CLERK2700.0012350

Sample Solution:

SQL Code(MySQL):

CREATE table employees (
employee_id integer(4) not null unique,
emp_name varchar(25),
hire_date date,
job_id varchar(25),
salary decimal(10,2),
manager_id integer(4),
department_id integer(4)
);

insert into employees values( 100,'Steven     ','1987-06-17','AD_PRES   ',24000.00,         0,   90);
insert into employees values( 101,'Neena      ','1987-06-18','AD_VP     ',17000.00,       100,   90);
insert into employees values( 102,'Lex        ','1987-06-19','AD_VP     ',17000.00,       100,   90);
insert into employees values( 103,'Alexander  ','1987-06-20','IT_PROG   ', 9000.00,       102,   60);
insert into employees values( 104,'Bruce      ','1987-06-21','IT_PROG   ', 6000.00,       103,   60);
insert into employees values( 105,'David      ','1987-06-22','IT_PROG   ', 4800.00,       103,   60);
insert into employees values( 106,'Valli      ','1987-06-23','IT_PROG   ', 4800.00,       103,   60);
insert into employees values( 107,'Diana      ','1987-06-24','IT_PROG   ', 4200.00,       103,   60);
insert into employees values( 114,'Den        ','1987-07-01','PU_MAN    ',11000.00,       100,   30);
insert into employees values( 115,'Alexander  ','1987-07-02','PU_CLERK  ', 3100.00,       114,   30);
insert into employees values( 116,'Shelli     ','1987-07-03','PU_CLERK  ', 2900.00,       114,   30);
insert into employees values( 117,'Sigal      ','1987-07-04','PU_CLERK  ', 2800.00,       114,   30);
insert into employees values( 108,'Nancy      ','1987-06-25','FI_MGR    ',12000.00,       101,  100);
insert into employees values( 109,'Daniel     ','1987-06-26','FI_ACCOUNT', 9000.00,       108,  100);
insert into employees values( 110,'John       ','1987-06-27','FI_ACCOUNT', 8200.00,       108,  100);
insert into employees values( 111,'Ismael     ','1987-06-28','FI_ACCOUNT', 7700.00,       108,  100);
insert into employees values( 112,'Jose Manuel','1987-06-29','FI_ACCOUNT', 7800.00,       108,  100);
insert into employees values( 113,'Luis       ','1987-06-30','FI_ACCOUNT', 6900.00,       108,  100);
insert into employees values( 133,'Jason      ','1987-07-20','ST_CLERK  ', 3300.00,       122,   50);
insert into employees values( 134,'Michael    ','1987-07-21','ST_CLERK  ', 2900.00,       122,   50);
insert into employees values( 135,'Ki         ','1987-07-22','ST_CLERK  ', 2400.00,       122,   50);
insert into employees values( 136,'Hazel      ','1987-07-23','ST_CLERK  ', 2200.00,       122,   50);
insert into employees values( 137,'Renske     ','1987-07-24','ST_CLERK  ', 3600.00,       123,   50);
insert into employees values( 138,'Stephen    ','1987-07-25','ST_CLERK  ', 3200.00,       123,   50);
insert into employees values( 139,'John       ','1987-07-26','ST_CLERK  ', 2700.00,       123,   50);


SELECT * FROM Employees a 
WHERE 1 = 
(SELECT COUNT(DISTINCT salary) 
FROM Employees b 
WHERE a.salary <= b.salary);

Sample Output:

employee_id|emp_name   |hire_date |job_id    |salary  |manager_id|department_id|
-----------+-----------+----------+----------+--------+----------+-------------+
        100|Steven     |1987-06-17|AD_PRES   |24000.00|         0|           90|

SQL Code Editor:


Contribute your code and comments through Disqus.

Previous: Department where highest salaried employee(s) are working.
Next: Return the shipping and delivery rates.



Become a Patron!

Follow us on Facebook and Twitter for latest update.

It will be nice if you may share this link in any developer community or anywhere else, from where other developers may find this content. Thanks.

https://www.w3resource.com/sql-exercises/challenges-1/sql-challenges-1-exercise-76.php