MYSQL:选择一列的 SUM 但该列基于另一个行 ID
Posted
技术标签:
【中文标题】MYSQL:选择一列的 SUM 但该列基于另一个行 ID【英文标题】:MYSQL:Selecting SUM of a column but the column is based of another row ID 【发布时间】:2021-05-25 11:17:46 【问题描述】:我想要全年的期初库存总和。期初库存基于另一个月的 end_inventory。 begin_inventory_id 包含指向 end_inventory 的另一行的 ID。当它基于另一行的 end_inventory 时,如何正确获得某一年的 begin_inventory 总和。我有下表
id | time_period | beginning_inventory_id | end_inventory | gross_sales |
---|---|---|---|---|
1 | 2020-09-01 | null | 1000 | 500 |
2 | 2020-10-01 | 1 | 2000 | 500 |
3 | 2020-11-01 | 2 | 3000 | 500 |
4 | 2020-12-01 | 3 | 4000 | 500 |
5 | 2021-01-01 | 4 | 5000 | 500 |
我有以下 SQL 查询
SELECT SUM(a.gross_sales) as gross_sales, SUM(a.end_inventory) as end_inventory,
(SELECT SUM(b.end_inventory) FROM fs_summary as b WHERE a.beginning_inventory_id = b.id) as beginning_inventory
FROM fs_summary as a
WHERE YEAR(a.time_period) = 2020
我想生成的输出是:
-
beginning_inventory = 6000
end_inventory = 10000
总销售额 = 2000
相反,我在 begin_inventory 上得到了空值。
任何帮助都会很棒!
【问题讨论】:
见meta.***.com/questions/333952/… 这个beginning_inventory = 6000
是否存储在您的数据库中?还是在终端上的便签上...
Beginning_inventory 未存储。我需要在 begin_inventory_id 中生成 id 的最终库存 - 2020 年应该生成 6000
@Strawberry 我的问题有问题吗? sql 查询有效,我指出了预期和理想的输出。以及详细说明我的表格以及其中的数据
我只能再次向您推荐我之前的评论
【参考方案1】:
我假设您想通过自连接从 1 个表中检索数据。
SELECT SUM(a.gross_sales),SUM(a.end_inventory),SUM(b.end_inventory)
FROM fs_summary a, fs_aummary b
WHERE b.id=a.beginning_inventory_id AND YEAR(a.time_period) = 2020
在这种情况下使用自我加入可以帮助您
编辑:您也可以将此脚本编写为,
SELECT SUM(a.gross_sales),SUM(a.end_inventory),SUM(b.end_inventory)
FROM fs_summary a
INNER JOIN fs_aummary b
ON b.id=a.beginning_inventory_id
WHERE YEAR(a.time_period) = 2020
【讨论】:
抱歉写错了。这个查询应该有效。这是一张桌子FROM
子句中带逗号的解决方案如何获得支持?
@GordonLinoff 你的意思是不能在 FROM 子句中使用逗号?
@BilalBinZia 。 . .一个不应该。几十年来,正确、明确、标准、可读的JOIN
语法一直是 SQL 的一部分。
@GordonLinoff 在性能方面没有区别。但是是的,JOIN
使查询更具可读性【参考方案2】:
使用自联接 SQL,您可以获得结果而不是子查询。
您应该使用两个不同的名称指定同一个表。您的查询如下所示
select sum(virtual_tb.end_inventory) as 'beginning_inventory', sum(org_tb.end_inventory) as 'end_inventory', sum(org_tb.gross_sales) as 'gross_sales'
from fs_summary org_tb left join fs_aummary virtual_tb on (virtual_tb.beginning_inventory_id = org_tb.id)
where year(org_tb.time_period) = 2020;
(近似输出)
beginning_inventory | end_inventory | gross_sales |
---|---|---|
6000 | 10000 | 2000 |
【讨论】:
以上是关于MYSQL:选择一列的 SUM 但该列基于另一个行 ID的主要内容,如果未能解决你的问题,请参考以下文章
当percentile_approx基于groupby返回特定列的单个值时,如何选择另一列的对应值?