Database SQLite使用不同表中的数据查找库存量

Database SQLite使用不同表中的数据查找库存量,database,sqlite,Database,Sqlite,图中显示了以下数据结构,任务是查找每个客户端的共享数量。 在deals表中,我有一个名为euro_amount的列,如果客户卖出了一些股票,则该列的数值为正数,如果客户买入,则该列的数值为负数。 我必须计算客户持有的股份总数。 我的想法是按客户对交易进行分组,然后分别检查每笔交易的欧元金额是否为正数,如果为正数,则除以卖出价格得到一个正数,否则除以买入价格从表中得到一个负数。然后把股票总数加起来 但我正在努力实现它。 我尝试的是: select *, case when d.euro_amoun

图中显示了以下数据结构,任务是查找每个客户端的共享数量。 在deals表中,我有一个名为euro_amount的列,如果客户卖出了一些股票,则该列的数值为正数,如果客户买入,则该列的数值为负数。 我必须计算客户持有的股份总数。 我的想法是按客户对交易进行分组,然后分别检查每笔交易的欧元金额是否为正数,如果为正数,则除以卖出价格得到一个正数,否则除以买入价格从表中得到一个负数。然后把股票总数加起来

但我正在努力实现它。 我尝试的是:

select *,
case when d.euro_amount<0 then (d.euro_amount/p.buy_price) as stock_in
else (d.euro_amount/p.sell_price) as stock_out
(stock_in+stock_out) as sum
inner join prices p on p.id_price=d.id_price
end
from table deals d
group by d.id_client;

我得到一个错误:error:near as:syntax error

加入3个表,按客户端分组,并使用符合您要求的CASE表达式进行聚合:

select c.id_client, c.first_name, c.last_name,
  sum(d.euro_amount / case when d.euro_amount > 0 then p.sell_price else p.buy_price end) totalsum
from clients c
left join deals d on d.id_client = c.id_client
left join prices p on p.id_price = d.id_price
group by c.id_client, c.first_name, c.last_name
为避免整数除法,如果euro_amount、sellprice和buy_price列为整数,请使用以下命令:

  sum(1.0 * d.euro_amount / case when d.euro_amount > 0 then p.sell_price else p.buy_price end) totalsum

到底是什么问题?你有错误吗?错误的结果?@Mureinik是的,错误是:error:near as:syntax error成功了,非常感谢!请您解释一下使用sum和totalsum背后的逻辑,为什么仅使用sum是不够的?totalsum只是列的名称/别名。SUM是返回此列值的聚合函数。您可以将totalsum更改为yoy喜欢的任何名称。对不起,还有一个问题,如果一个客户持有两种不同的股票,您可能还知道如何输出股票名称?目前,我只得到一个名称替换:从stocks group中选择s.stock_name | | s.stock_name,按s.stock_name替换为:group_concatdistinct s.stock_name,但将另一个表加入查询可能会影响总数,也可能不会影响总数。