这是我的问题..
Actual Auction Ammanat id
7000 500 100 228,229
7000 100 100 228,229
7000 900 100 228,229
5000 0 0 230
我想要下面给出的结果
Actual Auction Ammanat Remaining id
7000 500 100 5550 228,229
7000 100 100 5550 228,229
7000 900 100 5550 228,229
5000 0 0 5000 230
此处Remaining
为(sum(auction)-actual)
。
我正在使用PostgreSQL。但是如果有人知道SQL Server中的解决方案,那就没关系了。
答案 0 :(得分:15)
您需要使用窗口函数 - http://www.postgresql.org/docs/9.3/static/tutorial-window.html
类似的东西:
(Sum(Auction) OVER ()) - actual AS Remaining
答案 1 :(得分:7)
Idan 100%正确。我想提供一个解释:
(SUM (Auction) OVER ())
OVER ()
从原始查询中创建窗口,包括所有行。SUM (Auction)
是窗口函数,用于计算Auction
的总和。以下是进一步说明:
窗口是查询结果集中用户指定的一组行。
窗口函数计算窗口中所有行的值(例如SUM
)。
所有行都在窗口中,因为OVER()
不包含PARTITION BY
。使用PARTITION BY
窗口将包含行的子集。
... OVER子句定义查询结果集中的窗口或用户指定的行集。然后,窗口函数计算窗口中每行的值。您可以将OVER子句与函数一起使用来计算聚合值...如果OVER子句不包含PARTITION BY。这意味着该函数将应用于查询返回的所有行。