Vertica:Over Clause问题

时间:2016-10-05 09:25:11

标签: sql window-functions vertica

我的桌子下面有pk&销售专栏。

尝试计算第3列(销售额/(销售额总和)) 即100 / 1000,50 / 1000等......

pk | sales
----+-------
  1 |   100
  2 |    50
  3 |   250
  4 |   100
  5 |   500

在vertica中是可以的。

我使用以下查询尝试了累计金额。

select pk,sales,
sum(sales) over (order by pk) cumulative_sum
from sum_test
order by pk;

请建议..

2 个答案:

答案 0 :(得分:2)

我不知道Vertica。在标准SQL中,表达式sum(sales) over (order by pk)为您提供给定订单的运行总计。要获取所有行的总和,您需要删除order by子句:sum(sales) over ()

select 
  pk,
  sales,
  sum(sales) over () as total,
  sales / sum(sales) over () as percentage
from sum_test
order by pk;

答案 1 :(得分:0)

在你的窗口子句中放置一个ORDER BY将导致默认框架在无限制的预先行和当前行之间。

将窗口子句保留为空白将为您提供所需行的总和:

In [19]:
df['PID'] = df['PID'].apply(lambda x: [x for x in x if x != '.'])
df

Out[19]:
                           PID
1311  [5185, 5398, 5467, 5576]