Oracle无效标识错误



我知道这已经问过了,但我已经看了其他问题,我的查询仍然不会工作。我有一个表,上面有过去100年左右的MLB击球数据,我试图找到球员的id,本垒打和当年(2012年)本垒打总数的百分比。

查询:

select playerid, hr, hr/sum(hr) over (partition by playerid, yearid)*100 p
from mlbbattingstats 
where yearid=2012 and p != 0
order by hr;
错误:

第3行错误:
ORA-00904: "P":无效标识符

我尝试了多个不同的别名并得到了相同的错误。在我做错了什么帮助将不胜感激和抱歉,如果这已经回答了以前。

不能在同一查询级别上引用列别名(order by除外)。您需要将语句包装到派生表中:

select *
from (
  select playerid, hr, hr/sum(hr) over (partition by playerid, yearid)*100 p
  from mlbbattingstats 
  where yearid = 2012 
) 
where p <> 0
order by hr;

如果p <> 0,则hr <> 0。因此,您的查询似乎相当于:

select playerid, hr,
       hr/sum(hr) over (partition by playerid, yearid)*100 as p
from mlbbattingstats 
where yearid = 2012 and hr <> 0
order by hr;

您的原始问题是您不能使用where子句中select中定义的列别名作为同一级别。

最新更新