我想我计算每个仓库的总收入是错误的

Posted

技术标签:

【中文标题】我想我计算每个仓库的总收入是错误的【英文标题】:I think I'm calculating the total revenue from each warehouse wrong 【发布时间】:2021-05-01 21:41:59 【问题描述】:

我有一个问题正在解决,我希望有人仔细检查我的代码,因为我正在尝试计算数据库中每个仓库的收入并且返回值似乎很高 - 它返回数十个数以百万计的大多数仓库。不是不可能的高,但足以让我再看一眼。

Here is the ER diagram

这是我的代码:

SELECT WAREHOUSES.WAREHOUSE_ID, WAREHOUSES.WAREHOUSE_NAME, SUM(ORDER_ITEMS.QUANTITY * 
PRODUCTS.LIST_PRICE) AS TOTAL
FROM WAREHOUSES
JOIN INVENTORIES ON INVENTORIES.WAREHOUSE_ID = WAREHOUSES.WAREHOUSE_ID
JOIN PRODUCTS ON PRODUCTS.PRODUCT_ID = INVENTORIES.PRODUCT_ID 
JOIN ORDER_ITEMS ON PRODUCTS.PRODUCT_ID = ORDER_ITEMS.PRODUCT_ID
GROUP BY WAREHOUSES.WAREHOUSE_NAME, WAREHOUSES.WAREHOUSE_ID
ORDER BY TOTAL DESC;

我的 SUM 有问题吗?我是 SQL 新手,所以我相信您会发现此代码有很多调整 - 我很想听听!

谢谢!

【问题讨论】:

这里的“收入”是什么意思?收入通常是指所有已售商品价值的总和,在这种情况下,您几乎可以肯定需要包含orders 表,并且按仓库分组显然没有意义,因为我看不到确定的方法哪个仓库提供了历史订单上的哪些项目。如果您按仓库分组,我猜您确实会按仓库查找库存值,在这种情况下加入order_items 可能是不正确的。 product 表上已有 standard_costlist_price 样本数据和所需结果会有所帮助,最好简化为易于管理的示例。 【参考方案1】:

您正在计算仓库内每种产品的总销售额。然后在仓库级别添加它们。

我不认为这是有用的。而且这绝对是高估了销售额。

我不知道仓库级别的“收入”是什么意思。数据模型似乎没有任何迹象表明哪个仓库为给定订单提供了产品。

我最好的猜测是“收入”是指“潜在收入”。也就是说,对于仓库中库存的所有产品,如果以全价出售,可以产生多少收入?

作为提示:此计算与订单或订单线无关。它只需要在产品和库存之间进行计算。

【讨论】:

【参考方案2】:

查询看起来没问题,但我认为 order_items.unit_price 反映了实际支付的价格,因此反映了销售收入。

这里稍微整理了一下。我对表名使用别名,而不是重复整个名称。对于如何布局 SQL,尤其是连接子句,意见各不相同,但对我来说,这比大写文本的整体块效果更好。

select w.warehouse_id
     , w.warehouse_name
     , sum(oi.quantity * oi.unit_price) as total
from   warehouses w
       join inventories i on i.warehouse_id = w.warehouse_id
       join products p on p.product_id = i.product_id
       join order_items oi on p.product_id = oi.product_id
group by w.warehouse_name, w.warehouse_id
order  by total desc;

您可以通过在select 列表和group by 子句中包含它们的ID 并确认它给出了预期的总数来检查一个订单、一个产品或一个仓库的结果。示例数据在这里会有所帮助。

【讨论】:

以上是关于我想我计算每个仓库的总收入是错误的的主要内容,如果未能解决你的问题,请参考以下文章

如何计算累积平均收入? Python

如何在 SQL 中计算每个用户的唯一日期的平均收入

Angular 6 的路由不适用于“Router”模块,我想我有一个错误但我不知道它是啥

APP如何做到快速流量变现?我想我找到了答案

Python中的相等错误率

Azure SQL 数据仓库计算列错误