我不禁想到有一种简单的方法可以做到这一点 - 但我想确保我做得对,不要错过社区必须提供的任何简单性!我有两个表:order
和line
,分别按照您期望的1对多关系对这些订单中的订单地点和商品进行建模。 line
关系中的每条记录都有order
的外键。
我想创建一个简单的报告来计算过去6个月所有订单的平均权重。 weight
存储在line
表中,代表单个商品的权重,需要使用数量(qty
)来确定。我的计划是首先将sum
排在一起,然后计算出它们的平均值,但是虽然sum
似乎工作得很好,但我不确定如何应用这里的平均值。同样,我不知道如何获得所有这些总和的总和,以便我可以手动进行计算。
示例SQL
SELECT
SUM(a.weight * a.qty)
FROM
line AS a
LEFT JOIN
order AS b ON a.order_id = b.id
WHERE
b.datetime > DATE_SUB(NOW(), INTERVAL 6 MONTH) AND b.status = 'P'
GROUP BY a.order_id
ORDER BY b.datetime ASC;
示例结果
20.0000
66.7400
20.7300
7.5000
7.1100
我应该如何将这些结果计算出平均值,或者至少计算出总数?
答案 0 :(得分:2)
从现有查询中获取目标的最简单方法(使用派生表):
SELECT AVG(weight) AS Average, SUM(weight) AS Total
FROM
(
SELECT
SUM(a.weight * a.qty) AS weight
FROM
`line` AS a
LEFT JOIN
`order` AS b ON a.order_id = b.id
WHERE
b.datetime > DATE_SUB(NOW(), INTERVAL 6 MONTH) AND b.status = 'P'
GROUP BY a.order_id
) a