我在下面的代码中出现以下错误:“ FROM keyword not found not expected ”
SELECT *, MAX(Salary)
OVER (PARTITION BY ID_DEPT ORDER BY Salary DESC ) R
FROM SG_EMPLOYEES;
但是当我用每列的名字更改星号时,一切正常。所以我只是想了解背后的原因。
答案 0 :(得分:4)
在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;
您的版本采用累积最大值,然后将工资从最高到最低排序 - 因此累计与总体最大值相同。