我知道这已经问过了,但我已经看了其他问题,我的查询仍然不会工作。我有一个表,上面有过去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
中定义的列别名作为同一级别。