2017-09-25 37 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

是的,我正在考慮它,但我不是使用語法的粉絲,我不完全理解!你能簡單介紹一下分區嗎?它是否將您正在操作的組合在一起,然後您可以使用它上的命令? –