1

我不禁想到有一种简单的方法可以做到这一点 - 但我想确保我做对了,不要错过社区必然提供的任何简单性!我有两个表:orderline,分别以您期望的一对多关系对这些订单中的订单地点和项目进行建模。关系中的每条记录line都有一个外键order

我想创建一个简单的报告来计算过去 6 个月内所有订单的平均重量。weight存储在表中,表示单个项目line的重量,需要使用数量()来计算。我的计划是先将这些行放在一起,然后计算出它们的平均值,但是虽然看起来效果很好,但我不确定如何在这里应用平均值。同样,我不确定如何获得所有这些总和的总和,因此我可以手动进行计算。qtysumsum

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

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

4

1 回答 1

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
于 2013-06-04T13:57:32.343 回答