mySQL 从两个连接表中选择子查询中的数据总和

标签 mysql if-statement select sum subquery

我有一个像这样的表“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

欢迎任何建议

最佳答案

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

输出:

enter image description here

此处演示:

Rextester

关于mySQL 从两个连接表中选择子查询中的数据总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43249450/

相关文章:

java - 线程 "AWT-EventQueue-0"java.lang.ArrayIndexOutOfBoundsException : 1 >= 1 中的异常

vb.net - If 语句中的内存效率

java - 如何在 getter 和 setter 方法中正确使用 if else 语句?

mysql - 选择 subselect 返回多个值的行

php - 包含 2 个或更多字段的 sql 搜索

mysql - 如果值不同,如何插入或更新?

mysql - 数据库 read_timeout 和 write_timeout 是 ActiveRecord 独有的还是 mysql 原生的?

java - 如何返回程序中的步骤?

Mysql 将日期转换为星期几

mysql - SQL 查询 - 显示所有可用和不可用的 ChairNo