Oracle无效的标识符错误

时间:2015-05-17 19:23:47

标签: sql oracle

我知道之前已经问过这个问题,但是我已经查看了其他问题,但我的查询仍然没有成功。我有一张MLB击球数据表来自过去100年左右的时间,我试图找到那个球员,本垒打以及那一年(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":无效标识符

我尝试了多个不同的别名并得到了同样的错误。如果以前已经回答过,那么对我所做错的任何帮助都会感激不尽。

2 个答案:

答案 0 :(得分:2)

您无法在同一查询级别引用列别名(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;

答案 1 :(得分:1)

如果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;

您的原始问题是,您无法将select子句中where中定义的列别名用作同一级别。