2017-09-25 69 views
1

的澄清说明对于ORACLE 11g而言,我发现OVER子句似乎对某些分析非常有用。即使在查看OVER子句中的ORACLE手册之后,我仍然有一些理解语法的问题。使用OVER子句

我试图获得按时间顺序捐赠的所有礼品的累计金额。这全部来自只有一个表格,Donations包括查询中下面看到的所有列。

SELECT Donations.donationid, Donation.charity, Donation.giftdate, Donation.amount, SUM(Donation.amount) 
OVER (ORDER BY Donations.amount) AS Total_Gift_Amount 
FROM Donations.donations 
ORDER BY Total_Gift_Amount DESC; 

我以为我是在正确的轨道上,但有一些我错过了,这使我的列超出了范围。我收到的错误是

Error at line 1: ORA-00904:"DONATION"."AMOUNT": invalid identifier (its the SUM(donations.donations)) 

捐赠表包括:DonationID,慈善,金额,GiftDate,DonorID

我的主要困惑是,当我不使用OVER子句我可以得到结果集没有问题。但是,当我尝试使用OVER时,我开始得到很多语法错误和这种性质的事情。我想学习如何正确使用OVER。

我知道错误消息通常是当您键入无效的列标题或超出范围。为什么不能看到Donations.amount是一个有效的列名称?我可能会搞乱这个新条款的语法。

回答

1

该错误与分析(窗口)功能无关。

该表简单地命名为捐赠s,复数形式,您选择的其中一列为Donation.amount,捐款为单数。在那里失踪的“巴掌”,你应该没问题。

+0

感谢您注意到我修复了这个错误,并且不再发生错误。除此之外,你会说我正确使用OVER子句吗?我真的不确定我是否获得每件礼物的累积权利 –

+0

@ErikVorcov我通过'giftdate'命令,而不是金额。另外,你考虑一个“由......划分”条款 - 也许由慈善机构? – Mureinik

+0

是的,我正在考虑它,但我不是使用语法的粉丝,我不完全理解!你能简单介绍一下分区吗?它是否将您正在操作的组合在一起,然后您可以使用它上的命令? –