查询以查找日间交易的平均加权价格
Query to find and average weighted price for day trades
我发现了 this 个旧问题,它提供了一种计算加权平均价格的好方法。它基本上包括按股票名称分组,然后获取 sum(quantity*price)/sum(quantity)
但在日间交易中,您在同一天买卖资产,这意味着当天的最终数量为零并且 sql returns: Divide by zero error encountered
一个例子是
3 次交易同一只股票
1. Price 10 Quantity
2. 100 Price 8 Quantity 100
3. Price 30 Quantity 200
你们知道一些解决方法吗?有没有办法将正负数量的交易分别分组?
当然,添加一个由金额符号定义的分组桶...
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
加权平均的公式为:
sum(quantity*price)/sum(quantity)
------------------------^ NOT price
如果你想忽略交易方向,那么就用绝对值:
sum(abs(quantity)*price)/sum(abs(quantity))
我发现了 this 个旧问题,它提供了一种计算加权平均价格的好方法。它基本上包括按股票名称分组,然后获取 sum(quantity*price)/sum(quantity)
但在日间交易中,您在同一天买卖资产,这意味着当天的最终数量为零并且 sql returns: Divide by zero error encountered
一个例子是
3 次交易同一只股票
1. Price 10 Quantity
2. 100 Price 8 Quantity 100
3. Price 30 Quantity 200
你们知道一些解决方法吗?有没有办法将正负数量的交易分别分组?
当然,添加一个由金额符号定义的分组桶...
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
加权平均的公式为:
sum(quantity*price)/sum(quantity)
------------------------^ NOT price
如果你想忽略交易方向,那么就用绝对值:
sum(abs(quantity)*price)/sum(abs(quantity))