【问题标题】:If my resultset consists of grouped and summed records, how can I then sum/avg these?如果我的结果集由分组和求和的记录组成,那么我该如何求和/平均这些记录?
【发布时间】:2013-06-04 13:49:26
【问题描述】:

我不禁想到有一种简单的方法可以做到这一点 - 但我想确保我做对了,不要错过社区必将提供的任何简单性!我有两个表:orderline,分别以您期望的一对多关系对订单位置和这些订单中的项目进行建模。 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

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

【问题讨论】:

    标签: mysql sum average


    【解决方案1】:

    从现有查询(使用派生表)到达那里的最简单方法:

    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
    

    【讨论】:

    • 我会添加反引号... ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多