w3resource

MySQL Subquery Exercises: Query to get nth maximum salaries of employees

MySQL Subquery: Exercise-22 with Solution

Write a MySQL query to get nth maximum salaries of employees.

Sample table: employees

+-------------+-------------+-------------+----------+--------------------+------------+------------+----------+----------------+------------+---------------+
| EMPLOYEE_ID | FIRST_NAME  | LAST_NAME   | EMAIL    | PHONE_NUMBER       | HIRE_DATE  | JOB_ID     | SALARY   | COMMISSION_PCT | MANAGER_ID | DEPARTMENT_ID |
+-------------+-------------+-------------+----------+--------------------+------------+------------+----------+----------------+------------+---------------+
|         100 | Steven      | King        | SKING    | 515.123.4567       | 1987-06-17 | AD_PRES    | 24000.00 |           0.00 |          0 |   		  90 |
|         101 | Neena       | Kochhar     | NKOCHHAR | 515.123.4568       | 1987-06-18 | AD_VP      | 17000.00 |           0.00 |        100 |            90 |
|         102 | Lex         | De Haan     | LDEHAAN  | 515.123.4569       | 1987-06-19 | AD_VP      | 17000.00 |           0.00 |        100 |            90 |
|         103 | Alexander   | Hunold      | AHUNOLD  | 590.423.4567       | 1987-06-20 | IT_PROG    |  9000.00 |           0.00 |        102 |            60 |
|         104 | Bruce       | Ernst       | BERNST   | 590.423.4568       | 1987-06-21 | IT_PROG    |  6000.00 |           0.00 |        103 |            60 |
|         105 | David       | Austin      | DAUSTIN  | 590.423.4569       | 1987-06-22 | IT_PROG    |  4800.00 |           0.00 |        103 |            60 |
|         106 | Valli       | Pataballa   | VPATABAL | 590.423.4560       | 1987-06-23 | IT_PROG    |  4800.00 |           0.00 |        103 |            60 |
|         107 | Diana       | Lorentz     | DLORENTZ | 590.423.5567       | 1987-06-24 | IT_PROG    |  4200.00 |           0.00 |        103 |            60 |
|         108 | Nancy       | Greenberg   | NGREENBE | 515.124.4569       | 1987-06-25 | FI_MGR     | 12000.00 |           0.00 |        101 |           100 |
.........
|         206 | William     | Gietz       | WGIETZ   | 515.123.8181       | 1987-10-01 | AC_ACCOUNT |  8300.00 |           0.00 |        205 |           110 |
+-------------+-------------+-------------+----------+--------------------+------------+------------+----------+----------------+------------+---------------+

View the table

Code:

-- Selecting all columns from the employees table, aliasing it as 'emp1'
SELECT *
-- Selecting data from the employees table, aliasing it as 'emp1'
FROM employees emp1
-- Filtering the result set to include only employees where the count of distinct salaries greater than the salary of the current employee is 1
WHERE (1) = (
    -- Subquery to count the number of distinct salaries greater than the salary of each employee
    SELECT COUNT(DISTINCT(emp2.salary))
    -- Selecting data from the employees table, aliasing it as 'emp2'
    FROM employees emp2
    -- Filtering the result set to include only distinct salaries greater than the salary of the employee in the outer query (emp1.salary)
    WHERE emp2.salary > emp1.salary
);

Explanation:

  • This MySQL code selects all columns from the "employees" table and aliases it as 'emp1'.
  • It filters the result set to include only employees where the count of distinct salaries greater than the salary of the current employee is 1.
  • This is achieved using a subquery where the number of distinct salaries greater than the salary of each employee is counted. The outer query compares this count with the constant value 1.
  • If there's exactly one distinct salary greater than the salary of an employee, that employee will be included in the result set.

MySQL Subquery Syntax:

MySQL subquery syntax


- The subquery (inner query) executes once before the main query (outer query) executes.
- The main query (outer query) use the subquery result.

MySQL SubQueries: Query to get nth max salaries of employees.



Go to:


PREV :Write a MySQL query to get 3 minimum salaries.
NEXT :MySQL Joins

Structure of 'hr' database :

hr database


MySQL Code Editor:

Have another way to solve this solution? Contribute your code (and comments) through Disqus.

What is the difficulty level of this exercise?



Follow us on Facebook and Twitter for latest update.