首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL离开联接,求和和分组,我塞了下来。

SQL离开联接,求和和分组,我塞了下来。
EN

Stack Overflow用户
提问于 2013-07-09 10:02:33
回答 1查看 152关注 0票数 0

我有两张桌子

表1:(购买)

id。名称、数量、成本

  1. 帽子,20,300
  2. 手表,10,800
  3. 手表,50,700

表2:(出售)

id,名称,qt,出售

  1. 帽子,8,600
  2. 帽子,10,800
  3. 看,40,1300

我买东西然后转卖。

例如,上面的表1显示:我买了20顶帽子,每顶300美元,60只手表,每只800美元,然后每只700美元(这意味着每只716.66美元)。

然后我把它们转售给上面的表2: 18顶帽子和40块手表。

所以我还有2顶帽子和10块手表

我想让人们知道我的物品有多值钱。

所以我还剩2顶帽子就意味着2* 300 =600美元

我剩下10块手表,意思是20 *716.66美元=1433.2美元。

我总共有600美元+1433.2美元=14933.2美元

我怎么能从上面的两张表格中得到(14933.2)的结果。这对我来说真的很重要,所以请帮帮忙!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-09 10:46:59

你可以这样做:

代码语言:javascript
运行
复制
select
  b.name, 
  @av_cost := (select sum(x0.qt*x0.cost)/sum(x0.qt) from buy x0 where x0.name=b.name) as av_cost,
  @nr_buy := (select sum(x1.qt) from buy x1 where x1.name=b.name) as nr_buy,
  @nr_sold := (select sum(x2.qt) from sell x2 where x2.name=b.name) as nr_sold,
  @in_stock := @nr_buy - @nr_sold as in_stock,
  @in_stock * @av_cost as value_in_stock
from buy b
group by 1

我相信有人可以优化这一点,但就目前而言,它是有效的。

有关工作示例,请参见Sql小提琴

B.T.W.你在这里工作的是一个普通的模特。如果你所有的产品都售出了,而你买了一个新的,比如说500美元,那么这个数字就不是in_stock,因为过去你可能会有不同的价格。

如果这不是您想要的,您需要在“先到先出”系统中查看。在那里,你最后的20块手表将花费20*700,因为你的最后50块手表每块700块。

编辑:只有总数

如果你只想得到你能做的总数:

代码语言:javascript
运行
复制
select sum(x.value_in_stock) as value_total
from (
select
  b.name, 
  @av_cost := (select sum(x0.qt*x0.cost)/sum(x0.qt) from buy x0 where x0.name=b.name) as av_cost,
  @nr_buy := (select sum(x1.qt) from buy x1 where x1.name=b.name) as nr_buy,
  @nr_sold := (select sum(x2.qt) from sell x2 where x2.name=b.name) as nr_sold,
  @in_stock := @nr_buy - @nr_sold as in_stock,
  @in_stock * @av_cost as value_in_stock
from buy b
group by 1
) x
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17545417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档