我有表'A',表'B'和表'C'
A:
|Name|ID|
|AAA |Z5|
|AAB |Z5|
|BBB |F2|
...
B:
|ID|QTY|PRICE|
|Z5|5 |5.123|
|Z5|3 |2.222|
|Q0|9 |3.111|
C:
|ID|QTY|PRICE|
|Z5|8 |4.3 |
|F2|3 |0.55 |
我需要的结果:
A:
|Name|ID|SUM |
|AAA |Z5|64.459|
|AAB |Z5|64.459|
|BBB |F2|1.65 |
它汇总了在其他2个表中找到的所有内容
我尝试了一些B和A内部联接的情况。 尝试了一些联盟案例。 使用内部连接时,我最终得到的结果太少(B和C中的某些情况被切除(或A,不是100%确定)) 有了联盟,我得到了很多重复
答案 0 :(得分:0)
我认为您想加入union all
,然后加入:
select a.name, a.id, sum(total)
from a left join
((select b.id, sum(b.qty * b.price) as total
from b
group by b.id
) union all
(select c.id, sum(c.qty * c.price) as total
from c
group by c.id
)
) bc
group by a.name, a.id;
答案 1 :(得分:0)
select a.name, a.id, sum(bc.total) as total
from a left join
(select b.id, b.qty * b.price as total
from b
union all
select c.id, c.qty * c.price as total
from c
) bc on a.id = bc.id
group by a.name, a.id;
在 bc 级别上也可以进行聚合或不进行聚合是有争议的,但我不希望这样做,以保持代码更简洁。