w3resource

MySQL Joins Exercises: Get the department name and number of employees in the department

MySQL Joins: Exercise-6 with Solution

Write a MySQL query to get the department name and number of employees in the department.

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

Sample table: departments

+---------------+----------------------+------------+-------------+
| DEPARTMENT_ID | DEPARTMENT_NAME      | MANAGER_ID | LOCATION_ID |
+---------------+----------------------+------------+-------------+
|            10 | Administration       |        200 |        1700 |
|            20 | Marketing            |        201 |        1800 |
|            30 | Purchasing           |        114 |        1700 |
|            40 | Human Resources      |        203 |        2400 |
|            50 | Shipping             |        121 |        1500 |
|            60 | IT                   |        103 |        1400 |
|            70 | Public Relations     |        204 |        2700 |
|            80 | Sales                |        145 |        2500 |
.........
|           270 | Payroll              |          0 |        1700 |
+---------------+----------------------+------------+-------------+

View the table

Code:

-- This SQL query retrieves the count of employees in each department, along with the department names, from the 'departments' and 'employees' tables.

SELECT 
    department_name AS 'Department Name', -- Selecting the 'department_name' column from the 'departments' table and aliasing it as 'Department Name'.
    COUNT(*) AS 'No of Employees' -- Counting the number of records (employees) in each department and aliasing it as 'No of Employees'.
FROM 
    departments -- Specifying the 'departments' table.
INNER JOIN 
    employees -- Performing an inner join with the 'employees' table.
ON 
    employees.department_id = departments.department_id -- Joining the 'employees' and 'departments' tables based on the 'department_id' column.
GROUP BY 
    departments.department_id, department_name -- Grouping the result set by department ID and department name.
ORDER BY 
    department_name; -- Ordering the result set by department name in ascending order.

Explanation:

  • This SQL query retrieves the count of employees in each department along with the department names.
  • It performs an inner join between the 'departments' and 'employees' tables based on the 'department_id' column to associate employees with their respective departments.
  • The 'COUNT(*)' function is used to count the number of records (employees) in each department.
  • The 'GROUP BY' clause groups the result set by department ID and department name to apply the aggregate function ('COUNT(*)') correctly.

Sample Output:

Department Name		No of Employees
Accounting			2
Administration			1
Executive			3
Finance				6
Human Resources			1
IT				5
Marketing			2
Public Relations		1
Purchasing			6
Sales				34
Shipping			45

Go to:


PREV :Write a MySQL query to find the name (first_name, last_name) and hire date of the employees who was hired after 'Jones'.
NEXT :Write a MySQL query to find the employee ID, job title, number of days between ending date and starting date for all jobs in department 90 from job history.

MySQL Code Editor:

Structure of 'hr' database :

hr database

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.