Oracle 无效标识符错误
Posted
技术标签:
【中文标题】Oracle 无效标识符错误【英文标题】:Oracle Invalid Identifier Error 【发布时间】:2015-05-17 19:23:47 【问题描述】:我知道以前有人问过这个问题,但我查看了其他问题,但我的查询仍然无效。我有一张包含过去 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": 无效标识符
我尝试了多个不同的别名并得到相同的错误。如果之前已经回答了我做错的任何帮助,我们将不胜感激和抱歉。
【问题讨论】:
可能重复:***.com/questions/3852831/… 【参考方案1】:您不能在同一查询级别引用列别名(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;
【讨论】:
谢谢,这是有道理的,但现在我在第 6 行收到错误错误:ORA-00904: "YEARID": invalid identifier @user3587186:啊对。复制粘贴出错,抱歉。您可以将yearid = 2012
移动到派生表中(我所做的)或将yearid
添加到选择列表中,并在外部查询中将两个 where 条件保持在一起(性能方面,对于这个简单的查询并不重要)
【参考方案2】:
如果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
中定义的列别名用作同一级别。
【讨论】:
以上是关于Oracle 无效标识符错误的主要内容,如果未能解决你的问题,请参考以下文章