假设我有下表:
1 - 起始库存:
vendor | starting_stock
------------------------
adidas | 13
Reebok | 5
2 - 补货:
vendor | restocks
-----------------
adidas | 2
nike | 3
3 - 销售:
vendor | quantity_sold
----------------------
adidas | 10
nike | 1
我希望生成的表格是按供应商分组的销售情况。在这种情况下,销售量的计算方式如下:quantity_sold/(starting_stock + restocks)
。我唯一的问题是起始库存和补货表可能没有销售表中存在的某些供应商。因此,在上面的场景中,StartingStock
没有 nike
作为记录。因此,如果是这种情况,耐克的售价将仅为 1/3
或 1/(3+0)
。因此,我的结果表将是:
vendor | sell_through
---------------------
adidas | 1.5
nike | 0.33
Reebok | 0
所以我希望结果表中出现所有供应商(如果没有销售额,则值为 0,如上面所示的 Reebok)。
我尝试使用不同类型的联接,但无法实现。任何帮助都会很棒。谢谢。
最佳答案
我们可以在这里尝试完整的外部联接方法:
SELECT
COALESCE(ss.vendor, r.vendor, s.vendor) AS vendor,
COALESCE(s.quantity_sold, 0) /
(COALESCE(ss.starting_stock, 0) + COALESCE(r.restocks, 0)) AS sell_through
FROM StartingStock ss
FULL OUTER JOIN Restock r ON ss.vendor = r.vendor
FULL OUTER JOIN Sales s ON s.vendor = COALESCE(ss.vendor, r.vendor)
Demo
请注意,我为阿迪达斯的销售得出 2/3,因为售出数量为 10,库存总数为 15。
关于sql - Postgresql 连接表而不丢失记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63006807/