无法使用分区依据并在同一查询中选择*

时间:2017-04-05 19:53:12

标签: sql oracle window-functions

我在下面的代码中出现以下错误:“ FROM keyword not found not expected

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

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

1 个答案:

答案 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;

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