sql - Postgresql 连接表而不丢失记录

标签 sql postgresql join

假设我有下表:

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/31/(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/

相关文章:

mysql - 我如何编写一个查询来聚合多组行中具有最新日期的单行?

ruby-on-rails - 使用 activerecord 在 jsonb postgres 中查询嵌套的哈希数组是否存在 key

Postgresql - 从用双引号引起来的 CSV 空值导入

node.js - nodejs 中的 ORM Bookshelf + postgresql 或 MongoDB 数据库?

mysql连接三个表,用它的值替换id

sql - 通过query聚合一个group的长尾到 "others"

c# - 动态 LINQ 查询中 DateTime.AddMinutes() 的问题

sql - Rails - 不明确的列名 : id

php - 其中加入 1 : Many relationship?

sql-server - 将相关表中的总和分组到 linq 查询列中