【发布时间】:2016-06-30 04:03:47
【问题描述】:
我有两个表:area_costs 和 products_shipped。
area_costs 包含每个区域的费用,即快递费用、运输费用。
---------------------
|year|week|area|cost|
---------------------
products_shipped 表包含已运送给客户的所有产品:
-------------------------------------------------------
|product_id|area|customer_id|drop_id|date_id|product_price|
-------------------------------------------------------
现在如上所述,没有匹配的键来连接这些表。我想做一个计算,基本上将每个区域的成本除以每个区域的滴数,以获得每次滴的平均花费。如果所有信息都在一张表中可用,我可能会输入:
SELECT area, SUM(cost) / COUNT(drop_id) AS spent_per_drop FROM full_table GROUP by AREA
根据提供的信息有什么方法可以做到这一点吗?
样本数据:
area_costs:
---------------------
|year|week|area|cost|
|2016|20 |mel |5000|
|2016|20 |syd |7500|
|2016|20 |bri |3000|
|2016|21 |mel |5200|
|2016|21 |syd |7400|
---------------------
products_shipped:
-----------------------------------------------------
|product_id|area|customer_id|drop_id |date_id |
|515 |syd |100 |515-syd-100-01|20160607|
|515 |syd |102 |515-syd-102-12|20160607|
|508 |mel |103 |508-mel-103-03|20160607|
-----------------------------------------------------
假设我在 area_costs 表中的第 20 周执行 SUM():
SELECT area, SUM(cost_actual) FROM area_costs GROUP BY area
我将为 Syd 获得 7500。我想将它除以 products_shipped 表中的 drop_id 数,在示例数据中,我的计数为 2。因此,结果应该是 7500 / 2 = 3750。
我可以在 2 个查询中执行此操作,分别获取两个聚合然后划分结果,但这绝不是一个灵活的解决方案。
我的问题是:是否可以在一个查询中执行此操作?
感谢您的任何回答。
【问题讨论】:
-
如果您没有匹配的密钥,则无需进行计算。您似乎在两者中都有一个“区域”字段。
-
area不是两个表中的公共列吗?如果您可以提供一些示例数据来解释您期望的输出会更好 -
抱歉,忘了说明 - area_costs 包含的区域中的值不一定是 products_shipped 表中的实际区域;遗憾的是,如果我使用面积作为公共字段,我的计算就会有偏差。
-
@Adrian - 您必须提供一些示例数据以及您对输出的期望。
-
@Utsav 我正在尝试获取 area_costs 的总 SUM() ,然后将其除以 products_shipped 表中的下降总数。我可以在 2 个查询中做到这一点,基本上是从 area_costs 中获取 SUM() 和 drop 的 COUNT(),然后将其划分。这可能在 1 个查询中实现吗?