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 &lt;&gt; 0,那么hr &lt;&gt; 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 无效标识符错误的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 无效标识符错误

oracle 忽略子查询中的无效标识符错误

奇怪的 Oracle SQL“无效标识符”错误

ORACLE ORA-00904: 无效标识符错误

尝试创建表时 Oracle SQL “无效标识符错误”

我的一个 Oracle Apex 查询出现“无效标识符错误”