SELECT SUM(qty_shares*cost) AS out, user_id, stock_id, order_id
FROM table
WHERE transaction = 'B'
GROUP BY user_id, stock_id, order_id
然后:
SELECT SUM(qty_shares*cost) AS in, user_id, stock_id
FROM table
WHERE transaction = 'S'
GROUP BY user_id, stock_id, order_id
PHP:
$Margin = ($query2->in - $query1->out);
$Balance += $Margin;
这一切都可以在单个查询上完成,但如果速度更重要,那么这可能比子查询更快。
编辑:对于每股平均损益:
SELECT AVG(qty_shares/cost) AS price_per_share, transaction, user_id, stock_id
FROM table
GROUP BY transaction,user_id,stock_id
这应该返回每个交易类型、每个用户的每个股票类型的平均每股价格。所以交易 S 行是平均售价,交易 B 行是平均买入价。它们之间的差异是平均损益。
SELECT
SUM(
qty_shares *
(
SELECT AVG(A.qty_shares/A.cost) AS price_per_share
FROM table AS A
WHERE A.transaction = table.transaction
AND A.user_id = table.user_id
AND A.stock_id = table.stock_id
)
), user_id, stock_id, order_id
FROM table
WHERE transaction = 'B'
GROUP BY user_id, stock_id, order_id
该查询应返回每行卖出的股票数量乘以当前每股平均价格,得出每笔交易的平均保证金,卖出保证金为负数。您可能会发现查询速度很慢。我建议使用此信息作为起点,并为您的应用程序找到最佳方式。