gpt4 book ai didi

sql - 将两个 SQL 查询的结果组合到一个表中但不使用联合

转载 作者:行者123 更新时间:2023-11-29 13:40:30 25 4
gpt4 key购买 nike

下面有两个表格,我想生成第三个表格,其中包含按名称分组的进口值(value)和导出值(value)的总和。

表名:公司

country | name
canada a
usa b
china c
france d

表名:订单

id| importer | exporter | value
23 canada usa 10
24 usa china 50
25 canada china 10
26 france usa 40

例如,我可以使用联接分别生成导入表的总和和导出表的总和:

进口商总和

select name, sum(value)
from orders
full outer join companies
on orders.importer = companies.country

我希望看到一个表格,其中包含按名称分组的进口总额和导出总额。进口总和和导出总和是订单表中值列的总和。我很困惑是否必须在这里使用子查询。

示例表

Name |  sum of importer  | sum of exporter
a 20 0
b 50 50
c 0 60
d 40 0

最佳答案

为此,您需要分别使用两个全外连接,并根据name 列连接它们。

工作查询是:

select g1.name, g1.sumofimporter, g2.sumofexporter
from (
select c.name
,COALESCE(sum(o1.value), 0) as sumofimporter
from companies c
full outer join orders o1 on o1.importer = c.country
group by c.name
) g1
join (
select c.name
,COALESCE(sum(o2.value), 0) as sumofexporter
from companies c
full outer join orders o2 on o2.exporter = c.country
group by c.name
) g2 on g2.name = g1.name
order by g1.name

注意:由于该帖子是关于 postgresql 的,但我出于测试目的在 SQL Server 上创建了一个工作演示。
请查找 demo on db<>fiddle

关于sql - 将两个 SQL 查询的结果组合到一个表中但不使用联合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56152659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com