w3resource

MySQL Subquery Exercises: Query to get 3 maximum salaries

MySQL Subquery: Exercise-20 with Solution

Write a MySQL query to get 3 maximum salaries.

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 distinct salary values from the employees table 
SELECT DISTINCT salary 
-- Selecting data from the employees table, aliasing it as 'a'
FROM employees a 
-- Filtering the result set to include only salary values where there are at most 3 distinct salary values greater than or equal to it
WHERE 3 >= 
    -- Subquery to count the number of distinct salaries greater than or equal to each salary
    (SELECT COUNT(DISTINCT salary) 
    -- Selecting data from the employees table, aliasing it as 'b'
    FROM employees b 
    -- Filtering the result set to include only distinct salaries greater than or equal to the salary in the outer query (a.salary)
    WHERE b.salary >= a.salary) 
-- Sorting the result set in descending order based on salary
ORDER BY a.salary DESC;

Explanation :

  • This MySQL code selects distinct salary values from the "employees" table.
  • It filters the results to only include salary values where there are at most 3 distinct salary values greater than or equal to it.
  • This is achieved using a subquery where the number of distinct salaries greater than or equal to each salary is counted. The outer query compares this count with the constant value 3.
  • The result set is then sorted in descending order based on salary using the ORDER BY clause.

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 3 maximum salaries.



Go to:


PREV :Write a MySQL query to list the department ID and name of all the departments where no employee is working.
NEXT :Write a MySQL query to get 3 minimum salaries.

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.