169|SQL – Workforce Wisdom

BYU Student Author: @Andrew_Wilson
Reviewers: @Marta_Ellsworth, @Jimmy_Han
Estimated Time to Solve: 30 Minutes

We provide the solution to this challenge using:

  • SQL

Need a program? Click here.

Overview
Congratulations!!! You just got hired as the payroll specialist at Employers Inc. Employers Inc is a new company and we just hired 100 new employees. When they were hired, we collected the following information about their previous jobs:

  1. Average Hours Worked per week
  2. Position at the company
  3. Department they worked in
  4. Previous Hourly Wage

One of your first tasks is to analyze the data collected and check for any discrepancies. Here at Employers Inc we care about our employees and their lifestyle. We try very hard to pay a competitive wage and make sure our employees are working a reasonable number of hours per week. I need you to generate some reports about our new employees and their working history.

Instructions
Download the database and creaet the following queries:

Query 1: How many of our employees, based on position and department, were working 55 or more hours per week based on average hours per week? Your headers should be as following:
image

Query 2: How many Department chairs were being paid less than $40.00/ hour? Your headers should be as following:
image

Data Files

Suggestions and Hints
  • 55 or more suggests you should use >=

Solution

Time to Complete: 15 minutes
Difficulty: Easy

  1. SELECT e.DeptID, p.positionname, COUNT(e.avghours) AS QTY
    FROM Employees e INNER JOIN Positions p on e.PositionID=p.PositionID
    WHERE e.avghours>=55
    GROUP BY e.DeptID, p.PositionName
    ORDER BY COUNT(e.avghours) DESC;
  2. SELECT EmpNum, PositionID, HourlyRate
    From Employees
    WHERE PositionID=1 AND HourlyRate<40

Time to Complete: 15 minutes
Difficulty: Easy

Q1
SELECT e.DeptID, p.PositionName, Count([e.AvgHours]) as QTY
FROM Employees e
INNER JOIN Positions p on e.PositionID = p.PositionID
WHERE e.AvgHours >= 55
GROUP BY e.DeptID, p.PositionName;
Q2
SELECT [Employee#] as EmpNum, PositionID, HourlyRate
FROM Employees
WHERE HourlyRate < 40 AND PositionID = 1;

Q1) SELECT e.DeptID, p.PositionName, COUNT(e.AvgHours) AS QTY
FROM Employees AS e INNER JOIN Positions AS p ON e.PositionID=p.PositionID
WHERE e.AvgHours>= 55
GROUP BY e.DeptID, p.PositionName;

Q2) SELECT [e.Employee#] AS EmpNum, e.PositionID, e.HourlyRate
FROM Employees AS e
WHERE e.HourlyRate < 40 AND e.PositionID = 1;

Time to complete: 10 mins
Difficulty: Easy
Solution:

SELECT e.DeptID, p.positionname, COUNT (e.avghours) AS QTY
FROM Employees e INNER JOIN Positions p on e.PositionID=p.PositionID
WHERE e.avghours>=55
GROUP BY e.DeptID, p.PositionName;

SELECT [Employee#], PositionID, HourlyRate
From Employees
WHERE PositionID=1 AND HourlyRate<40

Time: 7 min
Difficulty: Easy/mid
Solutions
Q1
SELECT e.DeptID, p.PositionName, COUNT(e.AvgHours) AS QTY

FROM Employees as e

INNER JOIN Positions as p ON e.PositionID = p.PositionID

WHERE e.AvgHours >= 55

GROUP BY e.DeptID, p.PositionName;
Q2
SELECT e.[Employee#] AS EmpNum, e.PositionID, e.HourlyRate
FROM Employees AS e
WHERE e.PositionID = 1 AND e.HourlyRate < 40;

Time to Complete: 15 minutes
Difficulty: Beginner

SELECT e.DeptID, p.PositionName, Count(e.AvgHours) AS QTY

FROM Employees e

INNER JOIN Positions p ON e.PositionID=p.PositionID

WHERE e.AvgHours>=55

GROUP BY e.DeptID, p.PositionName

SELECT [Employee#] AS EmpNum, PositionID, HourlyRate

FROM Employees

WHERE PositionID=1 AND HourlyRate<40

Time to Complete: 25 mins
Difficulty: Medium-Hard
Solutions:

SELECT E.DeptID,
P.PositionName,
COUNT(*) AS QTY
FROM Employees AS E
INNER JOIN Positions AS P
ON E.PositionID = P.PositionID
WHERE E.AvgHours >= 55
GROUP BY E.DeptID, P.PositionName;

SELECT [E.Employee#] AS EmpNum,
E.PositionID,
E.HourlyRate
FROM Employees AS E
INNER JOIN Positions AS P
ON E.PositionID = P.PositionID
WHERE P.PositionName = “DepartmentChair”
AND E.HourlyRate < 40;

Time to Complete: 20 minutes
Rating: moderate
Solutions:
1.
SELECT Employees.DeptID, Positions.PositionName, COUNT([Employees.AvgHours]) AS QTY
FROM Employees
INNER JOIN Positions on Employees.PositionID = Positions.PositionID
WHERE Employee.AvgHours >= 55
GROUP BY Employee.DeptID, Positions.PositionName;
2.
SELECT [Employee#] AS EmpNum, PositionID, HourlyRate
FROM Employees
WHERE HourlyRate < 40 AND PositionID = 1;

Time to Complete: 15 Mins
Difficulty: Beginner
Solutions:
1.SELECT e.DeptID, p.PositionName, Count(AvgHours) AS QTY
FROM Employees AS e INNER JOIN Positions AS p ON e.PositionID = p.PositionID
WHERE e.AvgHours >= 55
GROUP BY e.DeptID, p.PositionName
ORDER BY count(AvgHours);
2.SELECT e.[Employee#] AS EmpNum, e.PositionID, e.HourlyRate
FROM Employees AS e
WHERE e.PositionID = 1 and e.HourlyRate < 40
ORDER BY e.HourlyRate ;

Time to Complete: 10 minutes
Difficulty: Easy
Solutions:

  1. SELECT e.DeptID, p.PositionName, Count(e.AvgHours) as QTY
    FROM Employees e
    INNER JOIN Positions p on e.PositionID = p.PositionID
    WHERE e.AvgHours >= 55
    GROUP BY e.DeptID, p.PositionName;

2.SELECT [Employee#] as EmpNum, PositionID, HourlyRate
FROM Employees
WHERE HourlyRate < 40 AND PositionID = 1;

Time to Complete: 5 minutes
Level: Easy
Solutions:

  1. SELECT e.DeptID, p.PositionName, COUNT(e.AvgHours) AS QTY
    FROM (Employees AS e INNER JOIN Positions AS p ON e.PositionID=p.PositionID)
    WHERE e.AvgHOURS >= 55
    GROUP BY e.DeptID, p.PositionName;

  2. SELECT EmpNum, PositionID, HourlyRate
    FROM Employees
    WHERE PositionID = 1 AND HourlyRate < 40;

Time to complete: 20 minutes
Difficulty: Easy

  1. SELECT E.DeptID, P.PositionName, Count(AvgHours) as QTY
    FROM Employees as E INNER JOIN Positions as P ON E.PositionID=P.PositionID
    WHERE E.AvgHours>= 55
    GROUP BY E.DeptID, P.PositionName
    ORDER BY COUNT(AvgHours) desc;
  2. SELECT [Employee#], PositionID, HourlyRate
    FROM Employees
    WHERE PositionID = 1 AND HourlyRate<40
    ORDER BY HourlyRate DESC;

Time to Complete: 15 minutes
Rating: Beginner

  1. Query 1 Solution:
    SELECT DeptID, PositionName, COUNT(AvgHours) AS QTY
    FROM Employees INNER JOIN Positions ON Employees.PositionID = Positions.PositionID
    WHERE AvgHours >= 55
    GROUP BY DeptID, PositionName
    ORDER BY COUNT(AvgHours) DESC;
  2. Query 2 Solution:
    SELECT [Employee#], PositionID, HourlyRate
    FROM Employees
    WHERE PositionID = 1 AND HourlyRate < 40
    ORDER BY HourlyRate DESC;

Time to Complete: 15 minutes
Difficulty Beginner

Query 1
SELECT e.DeptID, p.PositionName, Count(e.AvgHours) AS QTY
FROM Employees e
INNER JOIN Positions p ON e.PositionID=p.PositionID
WHERE e.avghours>=55
GROUP BY e.DeptID, p.PositionName;

Query 2
SELECT [Employee#] as EmpNum, PositionID, HourlyRate
From Employees
Where PositionID = 1 and HourlyRate < 40

Time: 20 mins
Difficulty: Medium
Solution:

  1. SELECT d.deptid, p.positionname, COUNT(e.AvgHours) as QTY
    FROM (Departments AS d INNER JOIN employees AS e ON d.deptid=e.deptid)
    INNER JOIN Positions AS p ON e.positionid=p.positionid
    WHERE e.AvgHours>=55
    GROUP BY d.deptid, p.positionname;
  2. SELECT [Employee#] AS empnum, positionid, HourlyRate
    FROM employees
    WHERE employees.HourlyRate<40 AND employees.positionid=1;
  1. SELECT Departments.DeptID, Positions.PositionName,Count(Employees.AvgHours) as QTY
    From ( Departments Inner Join Employees on Departments.DeptID=Employees.DeptID)
    Inner Join Positions on Positions.PositionID=Employees.PositionID
    Where Employees.AvgHours>=55
    Group by Departments.DeptID, Positions.PositionName
    2)SELECT Employees.[Employee#] as EmpNum, Employees.PositionID, Employees.HourlyRate
    From Employees
    Where Employees.HourlyRate<40
    And Employees.PositionID=1
    Rating: Intermediate
    Time: 18 minutes 59 seconds

Time: 15 Minutes
Difficulty: Relative Ease

  1. SELECT d.DeptID, p.PositionName, e.AvgHours AS QTY
    FROM ((Employees e INNER JOIN Positions p ON e.PositionID = p.PositionID) INNER JOIN Departments d ON d.DeptID = e.DeptID)
    WHERE e.AvgHours >= 55;

  2. SELECT [Employee#] AS EmpNum, PositionID, HourlyRate
    FROM Employees
    WHERE PositionID = 1 AND HourlyRate < 40;

Time to Complete: 10
Difficulty: Easy
Solutions:
1.
SELECT e.DeptID, p.PositionName, COUNT(e.AvgHours) AS QTY
FROM Employees AS e
INNER JOIN Positions AS p ON e.PositionID = p.PositionID
WHERE e.AvgHours >= 55
GROUP BY e.DeptID, p.PositionName;

  1. SELECT [Employee#] AS EmpNum, PositionID, HourlyRate
    FROM Employees
    WHERE HourlyRate < 40 AND PositionID = 1;
  1. SELECT e.DeptID, p.PositionName, COUNT(e.avghours) AS QTY
    FROM Employees e INNER JOIN Positions p on e.PositionID=p.PositionID
    WHERE e.avghours>=55
    GROUP BY e.DeptID, p.PositionName
    ORDER BY COUNT(e.avghours) DESC;
  2. SELECT EmpNum, PositionID, HourlyRate
    From Employees
    WHERE PositionID=1 AND HourlyRate<40