【发布时间】:2020-09-02 08:03:44
【问题描述】:
我有以下表格,我想计算销售数字。我使用了一些子查询来做到这一点。我可以不使用子查询而不使用表变量吗?
表 A,4 列 - 填充 键P |人口 |城市|国家 一些数据 100, 1234, 伦敦, 英国 101, 2345, 牛津, 英国 102, 3345, 布里斯托尔, 英国 103, 1256, 纽约, 美国 104, 5424, 洛杉矶, 美国 105, 100, 北京, 中国 表 B,4 列 - sales_amount 键A |金额 |城市|国家 一些数据 200, 105, 伦敦, 英国 201, 210, 牛津,英国 203, 23, 纽约, 美国 204, 54, 洛杉矶, 美国 第一个表中的城市可能不存在于第二个表中select aa.country, aa.popu, bb.amou from
(select sum(population) as popu, country from population group by country) aa
left join
(select sum(amount) as amou, country from sales_amount group by countr) bb
on aa.country = bb.country
子查询 1 将返回
英国, 6924
美国, 6680
中国, 100
子查询 2 将返回
英国,315
美国, 77
最后结果
英国, 6924, 315
美国, 6680, 77,
中国,100,空
这是一个例子。我的真实查询有很多这样的小表,我需要先分组,然后加入进行最终计算。
我不想使用子查询,因为我的真实表有更多的列并且真实的查询非常长。它非常不可读,很难维护。
【问题讨论】:
-
样本数据和预期结果将帮助我们帮助您。
-
似乎是一种合理的方法。为什么要改呢?
-
不过,您可能需要至少一个子查询。
-
你为什么不加入所有的表并在最后调用一个 groupby 而总是在子查询中做一个 groupby 呢?查询优化器应该足够聪明,能够弄清楚如何有效地做到这一点
-
@Karl:因为这些连接是多对多的,而且总和是完全错误的