我有 3 张桌子:
- 产品(sku、价格、priceOffer 等)
- 库存(sku、分支、项目)
- sales_provider(sku、项目、日期)
表 products 包含有关产品的所有信息,除了库存或销售。当前库存存储在表 stock 中,并包含有关每个分支上可用的项目数量的信息。表“sales_provider”存储了每种产品每天售出的商品数量。产品 ID 为“sku”。
现在,我试图通过一个查询获得以下产品:
- 已产生最佳利润(销售数量 * 报价)
- 仍有现货
而且,当然,我想知道有多少物品仍在库存中,有多少物品已售出。
我正在尝试这样的查询:
select
*
from
(
select
p.*,
sum(s.items) stock,
sum(sp.items) sales,
case when
p.priceOffer < p.price
and
p.priceOffer > 0
then
p.priceOffer
else
p.price
end finalPrice
from
products p
join
stock s
on
s.sku = p.sku
join
sales_provider sp
on
sp.sku = p.sku
group by
sku
) temp
where
stock > 0
order by
(finalPrice * sales) desc
limit 1;
但我有问题。基本上,我得到了大量的库存物品和 sales_provider 物品,而不是实际数量。此外,这是一个缓慢的查询(仅 9,500 个产品大约需要半秒)。
我一直在尝试修改它,我怀疑子查询是否必要,但我无法确定它。
如果有人可以帮助我改进它并获得正确的结果,我将非常感激。
提前感谢您提供任何有用的评论。
弗朗西斯科