使用MAX和OVER PARTITION BY无法识别语法问题

时间:2019-06-05 05:53:52

标签: mysql sql

我正在尝试回答有关中等难度的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

我已经多次查看了语法,因此我认为对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;

执行此操作的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

您可以考虑使用以下之一:

λ