不能在同一个查询中使用 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;
您的版本采用累积最大值,然后将薪水从最高到最低排序 -- 因此累积值与总最大值相同。
我对下面的代码有以下错误:“在预期的地方找不到 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;
您的版本采用累积最大值,然后将薪水从最高到最低排序 -- 因此累积值与总最大值相同。