查询以查找和平均日交易的加权价格

时间:2015-04-24 14:59:10

标签: sql sql-server finance stocks

我发现了this旧问题,这为计算加权平均价格带来了一个很好的方法。它主要包括按股票名称分组,然后获取金额(数量*价格)/总和(数量)

但是在日内交易中,您在同一天买入和卖出资产,这意味着当天的最终数量为零并且sql返回:Divide by zero error encountered

一个例子是

同一股票的3笔交易

 1. Price 10 Quantity 
 2. 100 Price 8 Quantity 100
 3. Price 30 Quantity 200

你们知道一些解决方法吗?有没有办法分别对正负数量的交易进行分组?

2 个答案:

答案 0 :(得分:2)

当然,添加一个由金额符号定义的分组存储桶......

Select assetIdentifier, 
    case when amount > 0 then 'debit' else 'credit' end typeTx, 
     Avg(Amount) 
from table
group by assetIdentifier,
   case when amount > 0 then 'debit' else 'credit' end

或者,如果您想在单个输出行上同时使用两个值,

Select assetIdentifier, 
    avg(case when amount > 0 then amount end) debit , 
    avg(case when amount < 0 then amount end) credit
from table
group by assetIdentifier

答案 1 :(得分:1)

加权平均数的公式为:

sum(quantity*price)/sum(quantity)
------------------------^ NOT price

如果您想忽略交易方向,那么只需使用绝对值:

sum(abs(quantity)*price)/sum(abs(quantity))