【问题标题】:mySQL SELECT from two joined tables with sum of data in subquery来自两个连接表的 mySQL SELECT,其中子查询中的数据总和
【发布时间】:2017-09-01 03:30:03
【问题描述】:

我有一个像这样的“schLoc”表

------------------------
| id | ... | ... | ... |
------------------------
| 1  | ... | ... | ... |
| 2  | ... | ... | ... |
| 3  | ... | ... | ... |
| 4  | ... | ... | ... |
| 5  | ... | ... | ... |
| .. | ... | ... | ... |
------------------------

还有另一个像这样的“schLocDett”表,像这样 schLoc.id=schLocDett.idDoc

-------------------------------
| idDoc | qta | ... | merce   |
-------------------------------
| 1     |  1  | ... | fattLoc |
| 1     |  1  | ... | fattSrv | 
| 2     |  3  | ... | fattLoc | 
| 2     |  2  | ... | notcSrv | 
| 2     |  2  | ... | fattSrv | 
| 3     |  5  | ... | fattSrv | 
| 3     |  3  | ... | notcSrv | 
| 3     |  3  | ... | fattLoc | 
| 3     |  7  | ... | fattLoc | 
| 4     |  5  | ... | notcSrv | 
| 4     |  4  | ... | fattSrv | 
| 4     |  1  | ... | fattSrv | 
| 5     |  1  | ... | notcSrv | 
| ...   | ... | ... | ....... | 
-------------------------------

我想要完整的 schLoc 列表和每个 id 相关联的 qta 的总和,但仅适用于 merce=fattLoc。如果不存在,总和将为 0。 这是我期望的结果

---------------------------
| id | sumQta | ... | ... |
------------------------
| 1  | 1      | ... | ... |
| 2  | 3      | ... | ... |
| 3  | 10     | ... | ... |
| 4  | 0      | ... | ... |
| 5  | 0      | ... | ... |
| .. | ...    | ... | ... |
---------------------------

我试试这个:

SELECT TOT.sumQta, TAB.*, 
FROM schLoc AS TAB, schLocDett AS DETT,
    (SELECT idDoc, SUM(qta) AS sumQta 
     FROM schLocDett 
     WHERE merce='fattLoc' 
     GROUP BY idDoc) AS TOT
WHERE TAB.id>0 
  AND TAB.id=DETT.idDoc 
  AND TAB.id=TOT.idDoc

但没有得到 ID 4 和 5

欢迎提出建议

【问题讨论】:

    标签: mysql if-statement select sum subquery


    【解决方案1】:
    SELECT TAB.*, COALESCE(TOT.sumQta, 0) AS sumQta
    FROM schLoc TAB
    LEFT JOIN
    (
        SELECT idDoc, SUM(qta) AS sumQta
        FROM schLocDett
        WHERE merce = 'fattLoc'
        GROUP BY idDoc
    ) TOT
        ON TAB.id = TOT.idDoc
    

    输出:

    演示在这里:

    Rextester

    【讨论】:

      【解决方案2】:

      您可以将LEFT JOINIFNULL 一起使用,例如:

      SELECT loc.id, SUM(IFNULL(det.qta, 0)) AS sum
      FROM schLoc loc LEFT JOIN schLocDett det ON loc.id = det.idDoc
      WHERE det.merce = 'fattLoc'
      GROUP BY loc.id;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-09
        • 1970-01-01
        • 1970-01-01
        • 2014-11-16
        • 2018-02-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多