gpt4 book ai didi

MySQL 获取左连接的总和

转载 作者:行者123 更新时间:2023-11-29 09:46:50 24 4
gpt4 key购买 nike

我有三张 table 。

  1. 地区
  2. 美食
  3. 横幅

如果我运行此查询

SELECT SUM(fee) FROM BANNERS;

输出将为 10,000

如果我运行此查询

SELECT SUM(fee) FROM CUISINE;

输出将为 12,800

但是如果我运行这个查询

SELECT REGIONS.name,
sum(BANNERS.fee) as banner_revenue,
sum(CUISINE.fee) as cuisine_revenue
FROM REGIONS
LEFT JOIN BANNERS ON REGIONS.id = BANNERS.region_id
LEFT JOIN CUISINE ON REGIONS.id = CUISINE.region_id
GROUP BY REGIONS.name;

输出错误。我想要的输出是

name    | banner_revenue | cuisine_revenue
------------------------------------------
NY | 10,000 | 4,800
Paris | NULL | 8,000
London | NULL | NULL

DB fiddle reproduce

为什么会发生这种情况?请引用我的数据库 fiddle 。

最佳答案

如果你运行

SELECT *
FROM REGIONS
LEFT JOIN BANNERS
ON REGIONS.id = BANNERS.region_id
LEFT JOIN CUISINE
ON REGIONS.id = CUISINE.region_id;

您会注意到,对于每个区域横幅对,所有菜肴都会加入,从而“倍增”菜肴。 IE。他们的费用也会成倍增加。

在派生表中进行分组并将它们连接起来以获得您想要的结果。

SELECT r.name,
sb.fee,
sc.fee
FROM REGIONS r
LEFT JOIN (SELECT sum(b.fee) fee,
b.region_id
FROM BANNERS b
GROUP BY b.region_id) sb
ON sb.region_id = r.id
LEFT JOIN (SELECT sum(c.fee) fee,
c.region_id
FROM CUISINE c
GROUP BY c.region_id) sc
ON sc.region_id = r.id;

关于MySQL 获取左连接的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55512541/

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