如果我的结果集由分组和汇总记录组成,那么我如何汇总/平均这些记录呢?

时间:2013-06-04 13:49:26

标签: mysql sum average

我不禁想到有一种简单的方法可以做到这一点 - 但我想确保我做得对,不要错过社区必须提供的任何简单性!我有两个表:orderline,分别按照您期望的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

我应该如何将这些结果计算出平均值,或者至少计算出总数?

1 个答案:

答案 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