Mysql 如果我的结果集由分组记录和求和记录组成,那么如何对这些记录进行求和/平均?

Mysql 如果我的结果集由分组记录和求和记录组成,那么如何对这些记录进行求和/平均?,mysql,sum,average,Mysql,Sum,Average,我忍不住认为有一个简单的方法可以做到这一点,但我想确保我做得正确,不要错过社区一定会提供的任何简单性!我有两个表:order和line,分别对订单、地点和订单中的项目进行建模,就像您所期望的那样,以一对多的关系进行。行关系中的每条记录都有一个指向顺序的外键 我想创建一个简单的报告,计算出过去6个月所有订单的平均重量。重量存储在行表格中,表示单个项目的重量,该项目需要使用数量(数量)进行计算。我的计划是先对这些行进行求和,然后计算出它们的平均值,但尽管求和似乎效果不错,但我不确定如何在这里应用平均

我忍不住认为有一个简单的方法可以做到这一点,但我想确保我做得正确,不要错过社区一定会提供的任何简单性!我有两个表:
order
line
,分别对订单、地点和订单中的项目进行建模,就像您所期望的那样,以一对多的关系进行。
关系中的每条记录都有一个指向
顺序
的外键

我想创建一个简单的报告,计算出过去6个月所有订单的平均重量。
重量
存储在
表格中,表示单个项目的重量,该项目需要使用数量(
数量
)进行计算。我的计划是先对这些行进行
求和
,然后计算出它们的平均值,但尽管
求和
似乎效果不错,但我不确定如何在这里应用平均值。同样,我不知道如何得到所有这些总和,以便我可以手动进行计算

示例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

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

从现有查询(使用派生表)获得结果的最简单方法:


我将添加反勾号…;)
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