【问题标题】:Clarification when using the OVER clause使用 OVER 子句时的说明
【发布时间】:2018-03-06 18:15:30
【问题描述】:

ORACLE 11g 的新手,我注意到 OVER 子句似乎对某些分析非常有用。即使在查看了关于 OVER 子句的 ORACLE 手册之后,我在理解我相信的语法时也遇到了一些问题。

我正在尝试获取按时间顺序捐赠的所有礼物的累计金额。这一切都来自一个表,捐赠,其中包括查询中下面看到的所有列。

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))

Donations 表包括:DonationID、Charity、Amount、GiftDate、DonorID

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

我知道错误消息通常是当您键入无效的列标题或超出范围时。为什么它看不到 Donations.amount 是一个有效的列名?我可能只是弄乱了这个新子句的语法。

【问题讨论】:

    标签: sql select oracle11g


    【解决方案1】:

    该错误与分析(窗口)函数无关。

    该表以复数形式简单命名为 Donations,您选择的其中一列是 Donation.amount,其中 Donation 为单数形式。拍打那里缺少的“s”,你应该没问题。

    【讨论】:

    • 感谢您注意到我已修复的小错字,并且不再收到错误消息。除此之外,你会说我正确使用了 OVER 子句吗?我不确定我是否获得了每份礼物的累积权利
    • @ErikVorcov 我会按giftdate 订购,而不是数量。另外,您考虑使用partition by 子句——也许是慈善机构?
    • 是的,我正在考虑它,但我不喜欢使用我不完全理解的语法!你能简单解释一下分区吗?它是否对您正在操作的内容进行分组,然后您可以在其上使用 order by?
    • 啊,我明白了,计算会在它经过每个分区后重置。嗯我怎么能把它应用到这个?将分区设置为慈善机构?
    • @ErikVorcov partition by 子句允许您将函数应用于特定的数据集。因此,例如,sum(donation.amount) over (partition by charity order by giftdate) 将随着时间的推移为每个慈善机构单独生成一个交换和。
    猜你喜欢
    • 2022-01-23
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    • 2014-04-04
    • 2015-10-27
    相关资源
    最近更新 更多