【问题标题】:How can I make a Sum Query on Mysql and Two Tables如何对 Mysql 和两个表进行求和查询
【发布时间】:2020-04-22 11:29:19
【问题描述】:

我需要一个查询方面的帮助,我不知道该怎么做。 我有一个带字段的表(TblParts):

代码库存替换

 1    10    0
 2     5    0
 3    15    0
 11    0    0
 22    0    0
 33    0    0

和另一个带有字段的表(TblSust)

代码替换

 1      11
 11      1
 2      22
 22      2

此表显示了每个代码的替换代码,例如,如果我没有代码1的库存,我可以使用代码11的库存,反之亦然。

我需要一个查询来添加每个 TblParts.stockreplace(仅在 TblParts.stock = 0 的情况下),TblParts.stock 的总和,其中 TblSust.code = TblParts.code

例如,TblParts 的结果将是:

代码库存替换

1      10     0
2      5      0
3      15     0
11     0     10
22     0     5
33     0     0

但如果我在每个之间有两个替换,则必须对每个相加,并将总和放在 TblParts.replacestock 上。

一些帮助? 谢谢。

【问题讨论】:

    标签: mysql sum stock


    【解决方案1】:

    tblparts 加入计算总和的查询:

    update tblparts p
    inner join (
      select s.code, sum(p.stock) total
      from tblsust s 
      inner join tblparts p on s.replace = p.code
      group by s.code
    ) t on t.code = p.code  
    set p.stockreplace = t.total
    where p.stockreplace = 0;
    

    请参阅demo
    结果:

    | Code | Stock | StockReplace |
    | ---- | ----- | ------------ |
    | 1    | 10    | 0            |
    | 2    | 5     | 0            |
    | 3    | 15    | 0            |
    | 11   | 0     | 10           |
    | 22   | 0     | 5            |
    | 33   | 0     | 0            |
    

    【讨论】:

      【解决方案2】:

      加入表并使用相关子查询来获取替换 NB 我已更改您的示例数据

      drop table if exists tblparts,tblsust;
      create table tblparts
      (Code int, Stock int, StockReplace int);
      insert into tblparts values
      ( 1  ,   0  ,  0),
      ( 2  ,   5  ,  0),
      ( 3  ,  15  ,  0),
      ( 11 ,  10  ,  0),
      ( 22 ,   0  ,  0),
      ( 33 ,   0  ,  0);
      
      create Table TblSust
      (Code int, `Replace` int);
      insert into tblsust values
      ( 1   ,   11),
      ( 11  ,    1),
      ( 2   ,   22),
      ( 22  ,    2);
      
      select p.code,p.stock,
              coalesce(
              (select p1.stock from tblparts p1 where p1.code = s.`replace`) 
              ,0) r
      from tblparts p
      left join tblsust s on s.code = p.code
      order by p.code
      ;
      
      +------+-------+------+
      | code | stock | r    |
      +------+-------+------+
      |    1 |     0 |   10 |
      |    2 |     5 |    0 |
      |    3 |    15 |    0 |
      |   11 |    10 |    0 |
      |   22 |     0 |    5 |
      |   33 |     0 |    0 |
      +------+-------+------+
      6 rows in set (0.001 sec)
      

      replace 是一个保留字,所以在这里反引号。

      如果有多个替换对股票值求和然后加入

      create table tblparts
      (Code int, Stock int, StockReplace int);
      insert into tblparts values
      ( 1  ,   0  ,  0),
      ( 2  ,   5  ,  0),
      ( 3  ,  15  ,  0),
      ( 11 ,  10  ,  0),
      ( 15 ,   2  ,  0),
      ( 22 ,   0  ,  0),
      ( 33 ,   0  ,  0);
      
      create Table TblSust
      (Code int, `Replace` int);
      insert into tblsust values
      ( 1   ,   11),
      ( 11  ,    1),
      ( 2   ,   22),
      ( 22  ,    2),
      (  1  ,   15);
      
      select p.code,p.stock,
              coalesce(
              s.stockreplace
              ,0) r
      from tblparts p
      left join 
      (select s.code, sum(stock) stockreplace
      from tblsust s
      join tblparts p  on s.`replace`= p.code
      group by s.code
      order by p.code
      ) s on p.code = s.code
      ;
      
      +------+-------+------+
      | code | stock | r    |
      
      +------+-------+------+
      |    1 |     0 |   12 |
      |    2 |     5 |    0 |
      |    3 |    15 |    0 |
      |   11 |    10 |    0 |
      |   15 |     2 |    0 |
      |   22 |     0 |    5 |
      |   33 |     0 |    0 |
      +------+-------+------+
      7 rows in set (0.001 sec)
      

      【讨论】:

      • 感谢 P.Salmon 的回复,问题是它没有添加。尝试添加 ( 33 , 0 , 0);到 tblparts 和 (1, 15); to tblsust code = 1 的结果必须是 r=12 (10 + 2) 但我分别得到值:1 0 10 1 0 2
      • 为多次替换编辑。
      • P.Salmon,你太棒了,现在它就像我想要的那样工作。最后一个问题,如何在 p.StockReplace 上插入 r 结果?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多