Reputation: 53
My problem is the code is the code is returning the max salary of an employee including managers when i want it to exclude managers.
Aside from that it works.
Here is the code i have written:
SELECT firstname || ' ' || lastname
AS "FULL NAME"
FROM EMPLOYEES
WHERE salary =
( SELECT MAX(salary)
FROM EMPLOYEES, DEPARTMENTS
WHERE NOT employee_id = manager_id);
Here is the database schema
COUNTRIES(country_id, country_name, region)
• Primary key: {country_id}
DEPARTMENTS(department_id, department_name, manager_id)
• Primary key: {department_id }
• Foreign key: [manager_id] ⊆ EMPLOYEES[employee_id]
DEPT_LOCATIONS(department_id, city, country_id)
• Primary key: {department_id, city}
• Foreign key: [department_id] ⊆ DEPARTMENTS[department_id] and
[country_id] ⊆ COUNTRIES[country_id]
EMPLOYEES(employee_id, firstname, lastname, email, phone_no, salary,
department_id)
• Primary key: {employee_id}
• Foreign key: [department_id] ⊆ DEPARTMENTS[department_id]
Any help much appreciated.
Upvotes: 0
Views: 34
Reputation: 70513
If your subquery selects the max salary by department then you can join on that result to get your list by department.
SELECT firstname || ' ' || lastname AS "FULL NAME",
E.department_id
FROM EMPLOYEES E
JOIN (
SELECT E.department_id, MAX(E.salary) as MAX_SALARY
FROM EMPLOYEES E
JOIN DEPARTMENTS D ON E.department_id = D.department_id
WHERE employee_id <> manager_id
GROUP BY E.department_id
) AS M ON M.MAX_SALARY = E.salary AND E.department_id = M.department_id
if you don't want it by department it looks like this:
SELECT firstname || ' ' || lastname AS "FULL NAME"
FROM EMPLOYEES E
JOIN (
SELECT MAX(E.salary) as MAX_SALARY
FROM EMPLOYEES E
JOIN DEPARTMENTS D ON E.department_id = D.department_id
WHERE employee_id <> manager_id
) AS M ON M.MAX_SALARY = E.salary
Upvotes: 1
Reputation: 1857
How about this?
SELECT e.firstname || ' ' || e.lastname
AS "FULL NAME"
FROM EMPLOYEES e
WHERE e.salary =
( SELECT MAX(salary)
FROM EMPLOYEES, DEPARTMENTS
WHERE NOT employee_id = manager_id)
AND NOT EXISTS (SELECT 1 FROM DEPARTMENTS d WHERE e.employee_id = d.manager_id)
All you need is filter the result
Upvotes: 0