Skip to content

Commit 49db180

Browse files
authored
Add files via upload
1 parent c523554 commit 49db180

File tree

2 files changed

+323
-0
lines changed

2 files changed

+323
-0
lines changed

query_analysis.sql

Lines changed: 175 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
1+
# Employee Demographics & Department Overview:
2+
3+
4+
-- 1. Total Number of Employees in Each Department
5+
SELECT
6+
department_name,
7+
COUNT(emp_id) AS 'Total Employee Cnt per Department'
8+
FROM
9+
employees
10+
INNER JOIN
11+
departments ON employees.department_id = departments.dep_id
12+
GROUP BY department_name;
13+
14+
-- 2. Department with the Most Employees
15+
SELECT
16+
d.department_name, COUNT(e.emp_id) AS Employees_cnt
17+
FROM
18+
departments d
19+
INNER JOIN
20+
employees e ON d.dep_id = e.department_id
21+
GROUP BY department_name
22+
ORDER BY Employees_cnt DESC
23+
LIMIT 1;
24+
25+
-- 3. Employees Who Have Worked for More Than 5 Years
26+
SELECT
27+
emp_id,
28+
first_name,
29+
last_name,
30+
joining_date,
31+
ROUND(DATEDIFF(CURDATE(), joining_date) / 365,
32+
0) AS Years_Of_Service
33+
FROM
34+
employees
35+
WHERE
36+
DATEDIFF(CURDATE(), JOINING_DATE) / 365 > 5
37+
ORDER BY Years_Of_Service DESC;
38+
39+
-- 4. Department with the Highest Average Performance Score
40+
SELECT
41+
d.department_name,
42+
ROUND(AVG(ep.performance_score), 1) AS Avg_Performance
43+
FROM
44+
departments d
45+
INNER JOIN
46+
employees e ON d.dep_id = e.department_id
47+
INNER JOIN
48+
employee_performance ep ON e.emp_id = ep.employee_id
49+
GROUP BY d.department_name
50+
ORDER BY Avg_Performance DESC
51+
LIMIT 1;
52+
53+
54+
# Salary & Compensation:
55+
-- 5. Average Salary by Department
56+
SELECT
57+
department_name, ROUND(AVG(salary), 2) AS 'Avg Salary'
58+
FROM
59+
departments
60+
INNER JOIN
61+
employees ON employees.department_id = departments.dep_id
62+
GROUP BY department_name
63+
ORDER BY department_name;
64+
65+
-- 6. Highest and Lowest Salary in Each Department
66+
SELECT
67+
department_name,
68+
MAX(salary) AS 'Highest Salary',
69+
MIN(salary) AS 'Lowest Salary'
70+
FROM
71+
employees
72+
INNER JOIN
73+
departments ON employees.department_id = departments.dep_id
74+
GROUP BY department_name;
75+
76+
-- 7. Employees with Salary Greater than the Department Average
77+
SELECT
78+
e.emp_id,
79+
e.first_name,
80+
e.last_name,
81+
e.salary,
82+
d.department_name
83+
FROM
84+
employees e
85+
INNER JOIN
86+
departments d ON e.department_id = d.dep_id
87+
WHERE
88+
e.salary > (SELECT
89+
AVG(salary)
90+
FROM
91+
employees
92+
WHERE
93+
e.department_id = d.dep_id
94+
);
95+
96+
-- 8. Total Salary Expenditure by Department
97+
SELECT
98+
d.department_name, SUM(e.salary) AS Total_salary
99+
FROM
100+
departments d
101+
INNER JOIN
102+
employees e ON d.dep_id = e.department_id
103+
GROUP BY d.department_name
104+
ORDER BY Total_salary DESC;
105+
106+
107+
# Employee Performance & Engagement:
108+
109+
-- 9. Employees with a Performance Score of 5
110+
SELECT
111+
e.emp_id, e.first_name, e.last_name, ep.Performance_Score
112+
FROM
113+
employees e
114+
JOIN
115+
employee_Performance ep ON e.emp_id = ep.employee_ID
116+
WHERE
117+
ep.Performance_Score = 5;
118+
119+
-- 10. Average Performance Score by Department
120+
SELECT
121+
d.department_name,
122+
ROUND(AVG(ep.performance_score), 1) AS avg_performance_score
123+
FROM
124+
departments d
125+
INNER JOIN
126+
employees e ON d.dep_id = e.department_id
127+
INNER JOIN
128+
employee_performance ep ON e.emp_id = ep.employee_id
129+
GROUP BY d.department_name
130+
ORDER BY avg_performance_score DESC;
131+
132+
-- 11. Employees with the Most Leaves Taken
133+
SELECT
134+
e.emp_id,
135+
e.first_name,
136+
e.last_name,
137+
COUNT(el.leave_id) AS Total_Leaves
138+
FROM
139+
employees e
140+
INNER JOIN
141+
employee_leave el ON e.emp_id = el.employee_id
142+
GROUP BY e.emp_id , e.first_name , e.last_name
143+
ORDER BY Total_Leaves DESC
144+
LIMIT 1;
145+
146+
-- 12. Employees with No Leaves Taken
147+
SELECT
148+
e.emp_id, e.first_name, e.last_name
149+
FROM
150+
employees e
151+
LEFT JOIN
152+
employee_leave el ON e.emp_id = el.employee_id
153+
WHERE
154+
el.employee_id IS NULL;
155+
156+
157+
# Employee Management:
158+
-- 13. List of Employees with Their Manager's Name
159+
SELECT
160+
e.emp_id,
161+
e.first_name AS employee_first_name,
162+
e.last_name AS employee_last_name,
163+
m.first_name AS manager_first_name,
164+
m.last_name AS manager_last_name
165+
FROM
166+
departments d
167+
INNER JOIN
168+
employees e ON d.dep_id = e.department_id
169+
LEFT JOIN
170+
employees m ON d.manager_id = m.emp_id;
171+
172+
173+
174+
175+

schema_and_data.sql

Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
-- Drop the database if it exists
2+
DROP DATABASE IF EXISTS employeedb;
3+
4+
-- Create the database
5+
CREATE DATABASE employeedb;
6+
7+
-- Switch to the created database
8+
USE employeedb;
9+
10+
11+
CREATE TABLE departments (
12+
dep_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
13+
department_name VARCHAR(100) NOT NULL,
14+
manager_id INT, -- Manager will be added as a foreign key later
15+
location VARCHAR(100)
16+
);
17+
18+
CREATE TABLE employees (
19+
emp_id INT PRIMARY KEY AUTO_INCREMENT,
20+
first_name VARCHAR(100) NOT NULL,
21+
last_name VARCHAR(100) NOT NULL,
22+
date_of_birth DATE NOT NULL,
23+
gender VARCHAR(10),
24+
joining_date DATE NOT NULL,
25+
department_id INT, -- Links to departments table
26+
salary DECIMAL(10 , 2 ) NOT NULL,
27+
job_title VARCHAR(100),
28+
location VARCHAR(100),
29+
CONSTRAINT fk_department_id FOREIGN KEY (department_id)
30+
REFERENCES departments (dep_id)
31+
);
32+
33+
-- Once both departments and employees tables are created, add the foreign key for manager_id:
34+
ALTER TABLE departments
35+
ADD CONSTRAINT fk_manager_id FOREIGN KEY (manager_id)
36+
REFERENCES employees (emp_id);
37+
38+
CREATE TABLE salaries (
39+
salary_id INT PRIMARY KEY AUTO_INCREMENT,
40+
employee_id INT, -- Links to employees table
41+
salary DECIMAL(10 , 2 ) NOT NULL,
42+
effective_date DATE NOT NULL,
43+
CONSTRAINT fk_employee_id FOREIGN KEY (employee_id)
44+
REFERENCES employees (emp_id)
45+
);
46+
47+
48+
CREATE TABLE employee_performance (
49+
performance_id INT PRIMARY KEY AUTO_INCREMENT,
50+
employee_id INT NOT NULL, -- Links to employees table
51+
performance_score INT,
52+
review_date DATE NOT NULL,
53+
manager_id INT NOT NULL, -- Links to employees table
54+
CONSTRAINT score_between_1_and_5 CHECK (performance_score BETWEEN 1 AND 5),
55+
CONSTRAINT fk_emp_performance_manager_id FOREIGN KEY (manager_id)
56+
REFERENCES employees (emp_id),
57+
CONSTRAINT fk_emp_performance_employee_id FOREIGN KEY (employee_id)
58+
REFERENCES employees (emp_id)
59+
);
60+
61+
62+
63+
CREATE TABLE employee_leave (
64+
leave_id INT PRIMARY KEY AUTO_INCREMENT,
65+
employee_id INT NOT NULL, -- Links to employees table
66+
leave_type VARCHAR(50) NOT NULL,
67+
start_date DATE NOT NULL,
68+
end_date DATE NOT NULL,
69+
CONSTRAINT fk_emp_leave_employee_id FOREIGN KEY (employee_id)
70+
REFERENCES employees (emp_id)
71+
);
72+
73+
74+
INSERT INTO Departments (dep_id, department_name, manager_id, location)
75+
VALUES
76+
(1, 'Human Resources', NULL, 'New York'),
77+
(2, 'Engineering', NULL, 'San Francisco'),
78+
(3, 'Sales', NULL, 'Chicago'),
79+
(4, 'Marketing', NULL, 'Boston'),
80+
(5, 'Finance', NULL, 'Los Angeles');
81+
82+
INSERT INTO Employees (emp_id, first_name, last_name, date_of_birth, gender, joining_date, department_id, salary, job_title, location)
83+
VALUES
84+
(1, 'Alice', 'Smith', '1985-02-14', 'Female', '2010-06-15', 2, 95000.00, 'Senior Engineer', 'San Francisco'),
85+
(2, 'Bob', 'Johnson', '1990-08-22', 'Male', '2015-09-01', 2, 85000.00, 'Software Engineer', 'San Francisco'),
86+
(3, 'Charlie', 'Brown', '1980-12-12', 'Male', '2005-01-20', 3, 75000.00, 'Sales Manager', 'Chicago'),
87+
(4, 'Diana', 'Williams', '1992-03-28', 'Female', '2018-07-19', 1, 65000.00, 'HR Specialist', 'New York'),
88+
(5, 'Evan', 'Taylor', '1987-11-10', 'Male', '2012-10-05', 4, 72000.00, 'Marketing Analyst', 'Boston'),
89+
(6, 'Grace', 'Lee', '1995-06-05', 'Female', '2021-01-12', 5, 78000.00, 'Financial Analyst', 'Los Angeles'),
90+
(7, 'John', 'Doe', '1989-03-22', 'Male', '2017-05-23', 4, 70000.00, 'Marketing Manager', 'Boston');
91+
92+
93+
-- Setting the manager_id for each department
94+
UPDATE Departments
95+
SET manager_id = 1
96+
WHERE dep_id = 2; -- Engineering department manager is Alice Smith
97+
98+
UPDATE Departments
99+
SET manager_id = 3
100+
WHERE dep_id = 3; -- Sales department manager is Charlie Brown
101+
102+
UPDATE Departments
103+
SET manager_id = 4
104+
WHERE dep_id = 1; -- HR department manager is Diana Williams
105+
106+
UPDATE Departments
107+
SET manager_id = 5
108+
WHERE dep_id = 4; -- Marketing department manager is Evan Taylor
109+
110+
111+
112+
INSERT INTO Salaries (salary_id, employee_id, salary, effective_date)
113+
VALUES
114+
(1, 1, 95000.00, '2020-01-01'),
115+
(2, 1, 90000.00, '2018-01-01'),
116+
(3, 2, 85000.00, '2021-06-01'),
117+
(4, 3, 75000.00, '2019-09-01'),
118+
(5, 4, 65000.00, '2022-03-01'),
119+
(6, 5, 72000.00, '2020-10-01'),
120+
(7, 6, 78000.00, '2021-01-12');
121+
122+
123+
INSERT INTO Employee_Performance (performance_id, employee_id, performance_score, review_date, manager_id)
124+
VALUES
125+
(1, 1, 5, '2023-06-01', 1),
126+
(2, 2, 4, '2023-06-01', 1),
127+
(3, 3, 3, '2022-12-15', 3),
128+
(4, 4, 4, '2023-03-20', 4),
129+
(5, 5, 5, '2023-05-10', 5),
130+
(6, 6, 4, '2023-04-15', 5),
131+
(7, 7, 3, '2023-07-01', 4);
132+
133+
134+
INSERT INTO Employee_Leave (leave_id, employee_id, leave_type, start_date, end_date)
135+
VALUES
136+
(1, 1, 'Vacation', '2023-08-01', '2023-08-15'),
137+
(2, 2, 'Sick Leave', '2023-09-10', '2023-09-12'),
138+
(3, 3, 'Vacation', '2023-07-05', '2023-07-15'),
139+
(4, 4, 'Maternity Leave', '2023-01-10', '2023-03-10'),
140+
(5, 5, 'Sick Leave', '2023-06-20', '2023-06-22'),
141+
(6, 6, 'Vacation', '2023-05-01', '2023-05-10'),
142+
(7, 7, 'Personal Leave', '2023-09-01', '2023-09-05');
143+
144+
145+
146+
147+
148+

0 commit comments

Comments
 (0)