我知道之前已经问过这个问题,但是我已经查看了其他问题,但我的查询仍然没有成功。我有一张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":无效标识符
我尝试了多个不同的别名并得到了同样的错误。如果以前已经回答过,那么对我所做错的任何帮助都会感激不尽。
答案 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
中定义的列别名用作同一级别。