mysql - MySQL连接两个表,每个表都有group by
问题描述
我有两个带有零件号和数量的 mysql 表。我想总结每个表的数量sum(qty) ... group by partNumber
然后加入零件号上的两个表。
有时,表 A 将具有表 b 没有的部件号,反之亦然。下面是我所期待的图像。
我已经尝试过这样的事情,但这会为每个表返回一行,我希望它返回 1 个组合行
SELECT *, null as macroQty, sum(qty) as cardinalQty
FROM parts.cardinal where fileinfoid IN
(select cardinalFiles from parts.reports where fileinfoid = 418)
GROUP BY partNumber UNION ALL
SELECT *, sum(qty) as macroQty, null as cardinalQty
FROM parts.macro where fileinfoid IN
(select macroFiles from parts.reports where fileinfoid = 418 )
GROUP BY partNumber
我还尝试将它包装在一个外部选择中,并像这样按外部选择中的部件号进行分组,但这会导致第二个内部选择始终为空
SELECT * FROM (
SELECT *, null as macroQty, sum(qty) as cardinalQty
FROM parts.cardinal where fileinfoid IN
(select cardinalFiles from parts.reports where fileinfoid = 418)
GROUP BY partNumber UNION ALL
SELECT *, sum(qty) as macroQty, null as cardinalQty
FROM parts.macro where fileinfoid IN
(select macroFiles from parts.reports where fileinfoid = 418 )
GROUP BY partNumber
) combined GROUP BY combined.partNumber
解决方案
一种方法是识别 2 个表中的唯一部件号(使用 UNION 并对其应用不同),然后使用相关子查询来获取总和。例如
drop table if exists a,b;
create table a(id int,val int);
create table b(id int,val int);
insert into a values(1,10),(1,10),(3,10),(4,10);
insert into b values (2,10),(4,10),(4,10);
select (select sum(a.val) from a where a.id = s.id) aval,
(select sum(b.val) from b where b.id = s.id) bval,
s.id partno
from
(
select id from a
union select id from b
) s
order by s.id;
+------+------+--------+
| aval | bval | partno |
+------+------+--------+
| 20 | NULL | 1 |
| NULL | 10 | 2 |
| 10 | NULL | 3 |
| 10 | 20 | 4 |
+------+------+--------+
4 rows in set (0.00 sec)
推荐阅读
- flutter - 如果最终有,颤动会忽略捕获中的警报对话框
- mysql - 在 MYSQL 列中搜索逗号分隔值
- mono - Mono 不执行 MacOS 11.1
- python - 使用 Python 从列表中打印出独特的模式
- excel - 从 Wikipedia 的信息框中刮取内文
- c# - Telerik Reports - ReportController - SubReport
- java - 将 Jackson 注释与 JsonPatch 一起使用
- python - 带有 Scoket/Python 问题的 Raspberry Pi 服务器
- javascript - 清空数组后,代码读不到它是空的
- c++ - WM_CLOSE 消息和应用程序冻结