Sql 不能在同一查询中使用“分区依据”和“选择*”

Sql 不能在同一查询中使用“分区依据”和“选择*”,sql,oracle,window-functions,Sql,Oracle,Window Functions,我对下面的代码有以下错误:未在预期位置找到FROM关键字 但是,当我用每列的名称更改星号时,一切正常。所以我只想了解这背后的原因。在Oracle中使用*时,如果选择了任何其他表达式,则必须对其进行限定。因此: SELECT e.*, MAX(e.Salary) OVER (PARTITION BY e.ID_DEPT ORDER BY e.Salary DESC) as R FROM SG_EMPLOYEES e; 请注意,我非常喜欢限定所有列名 你的问题似乎很奇怪。您不需要OR

我对下面的代码有以下错误:未在预期位置找到FROM关键字

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

在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子句:

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

在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子句:


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

不是答案,但在这种情况下,存在“排序依据”没有多大意义。请尝试SG_员工。*而不是仅仅“是”。知道了。非常感谢。不是答案,但在这种情况下,ORDER BY的出现没有多大意义。请尝试SG_员工。*而不仅仅是*是。知道了。非常感谢。非常感谢。我不知道调用select asterisk时会考虑分析函数的别名,这样会导致错误。谢谢!我不知道调用select asterisk时会考虑分析函数的别名,从而导致错误。
SELECT e.*,
       MAX(e.Salary) OVER (PARTITION BY e.ID_DEPT) as R
FROM SG_EMPLOYEES e;