Я пытаюсь ответить на вопрос SQL Leetcode о средней сложности.Вопрос состоит в том, чтобы попросить меня найти людей с самой высокой зарплатой в каждом отделе.
Я пытался использовать GROUP BY, но не смог выяснить этот подход, поэтому я попытался использовать PARTITION BY, чтобы найтимаксимальная зарплата для каждого отдела.После этого я бы добавил окончательное утверждение WHERE, в котором я мог бы отфильтровать людей с зарплатой, равной максимальной зарплате.
Это мой запрос:
SELECT
Department.Name AS Department,
Employee.Name AS Employee,
Employee.Salary,
MAX(Employee.Salary) OVER (PARTITION BY Department.Name) AS MaxSalary
FROM Employee
LEFT JOIN Department ON Department.id = Employee.DepartmentId
;
Есть две таблицы.
EMPLOYEE TABLE:
+----+-------+--------+--------------+
| Id | Name | Salary | DepartmentId |
+----+-------+--------+--------------+
| 1 | Joe | 70000 | 1 |
| 2 | Jim | 90000 | 1 |
| 3 | Henry | 80000 | 2 |
| 4 | Sam | 60000 | 2 |
| 5 | Max | 90000 | 1 |
+----+-------+--------+--------------+
DEPARTMENT TABLE:
+----+----------+
| Id | Name |
+----+----------+
| 1 | IT |
| 2 | Sales |
+----+----------+
и правильный вывод должен выглядеть следующим образом.
CORRECT EXPECTED OUTPUT:
+------------+----------+--------+
| Department | Employee | Salary |
+------------+----------+--------+
| IT | Max | 90000 |
| IT | Jim | 90000 |
| Sales | Henry | 80000 |
+------------+----------+--------+
Выполнение моего текущего запроса приводит к ошибке времени выполнения с этим сообщением:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(PARTITION BY Department.Name) AS MaxSalary
FROM Employee
LEFT JOIN Department O' at line 7
IЯ просматривал синтаксис несколько раз, поэтому я предполагаю, что это неверное понимание того, как работает PARTITION BY.Я ожидал, что увижу максимальную зарплату для каждого отдела, указанную справа для каждого человека.Примерно так:
+----+-------+--------+--------------+-----------+
| Id | Name | Salary | DepartmentId | MaxSalary |
+----+-------+--------+--------------+-----------+
| 1 | Joe | 70000 | 1 | 90000 |
| 2 | Jim | 90000 | 1 | 90000 |
| 3 | Henry | 80000 | 2 | 80000 |
| 4 | Sam | 60000 | 2 | 80000 |
| 5 | Max | 90000 | 1 | 90000 |
+----+-------+--------+--------------+ -----------+
После этого я собирался добавить эту строку:
WHERE Employee.Salary = MaxSalary;
Как правильно это сделать?