不能在同一个查询中使用 Partition by 和 select *

Can't use Partition by and select * in the same query

我对下面的代码有以下错误:“在预期的地方找不到 FROM 关键字

SELECT *, MAX(Salary)
OVER (PARTITION BY ID_DEPT ORDER BY Salary DESC ) R
FROM SG_EMPLOYEES;

但是当我用每列的名称更改星号时,一切正常。所以我只想了解这背后的原因。

当您在 Oracle 中使用 * 时,如果选择任何其他表达式,则必须对其进行限定。所以:

SELECT e.*,
       MAX(e.Salary) OVER (PARTITION BY e.ID_DEPT ORDER BY e.Salary DESC) as R
FROM SG_EMPLOYEES e;

请注意,我非常喜欢限定所有列名。

你的查询其实看起来很奇怪。您不需要 ORDER BY 子句:

SELECT e.*,
       MAX(e.Salary) OVER (PARTITION BY e.ID_DEPT) as R
FROM SG_EMPLOYEES e;

您的版本采用累积最大值,然后将薪水从最高到最低排序 -- 因此累积值与总最大值相同。