如何使用MySQL中的连接来匹配销售和购买数据?

dfty9e19  于 2023-05-28  发布在  Mysql
关注(0)|答案(1)|浏览(136)

我需要将products_purchased表中的price_buyed连接到sales表,然后在sales表中计算适当的利润率。
销售
| dt|产物|数量|总计|
| - -----|- -----|- -----|- -----|
| 2023-05-01 2023-05-01| X|一个|一百五十|
| 2023-05-01 2023-05-01| X| 2|三百|
| 2023-05-01 2023-05-01| Y|一个|一百|
| 2023-05-07 2023-05-07| X|一个|一百六十|
| 2023-05-07 2023-05-07| Y|一个|一百一十|
| 2023-05-07 2023-05-07| Y| 2|二百二十|
产品_采购
| dt|产物|买价|
| - -----|- -----|- -----|
| 2023-05-01 2023-05-01| X|一百|
| 2023-05-01 2023-05-01| Y|六十|
| 2023-05-07 2023-05-07| X|一百一十|
| 2023-05-07 2023-05-07| Y|六十六|
我的期望:
SALES TABLE(输出)
| dt|产物|数量|总计|买价|
| - -----|- -----|- -----|- -----|- -----|
| 2023-05-01 2023-05-01| X|一个|一百五十|一百|
| 2023-05-01 2023-05-01| X| 2|三百|一百|
| 2023-05-01 2023-05-01| Y|一个|一百|六十|
| 2023-05-07 2023-05-07| X|一个|一百六十|一百一十|
| 2023-05-07 2023-05-07| Y|一个|一百一十|六十|
| 2023-05-07 2023-05-07| Y| 2|二百二十|六十六|

bnl4lu3b

bnl4lu3b1#

如果在products_purchased中总是有一个价格,当一个产品被出售时,我们可以只join

select s.*, p.price_bought
from sales s
inner join products_purchased p using(dt, product)

请注意,连接不考虑数量,因为您的数据似乎显示。
另一方面,如果可能存在没有相应产品价格的销售日期,则:

  • 您可以将inner join转换为left join,以避免过滤掉这些行(并获得null价格)
  • 或者您可能希望检索该日期之前的最新价格;一个选项使用相关子查询:
select s.*, 
    (
        select p.price_bought
        from products_purchased p
        where p.dt <= s.dt and p.product = s.product
        order by d.dt desc limit 1
    ) price_bought
from sales s

相关问题