You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用SQL计算每月订单平均金额?附H2数据库查询示例

嘿,我来帮你实现每月订单平均金额的计算需求~ 根据你提供的表结构和数据,这里有几个实用的SQL方案,适配H2数据库:

方案1:直接从原表计算(高效简洁)

这是最直接的写法,不需要嵌套子查询,直接基于ORDERZ表计算每月的平均订单金额:

SELECT
    DATE_FORMAT(o.order_date, '%Y-%m') AS order_month,
    AVG(o.price * o.petrol_qty) AS average_order_amount
FROM ORDERZ o
LEFT JOIN truck t ON o.truck_id = t.truck_id
GROUP BY DATE_FORMAT(o.order_date, '%Y-%m')
ORDER BY order_month;

关键部分解释:

  • DATE_FORMAT(o.order_date, '%Y-%m'):把订单日期转换成YYYY-MM格式的字符串,这样就能精准按「年月」分组
  • AVG(o.price * o.petrol_qty):先计算每笔订单的总金额(单价×加油量),再对当月所有订单取平均值
  • LEFT JOIN truck:保留原查询的关联逻辑,如果你的业务不需要关联卡车表(毕竟计算金额没用到卡车字段),可以直接去掉这一行,查询会更快
  • ORDER BY order_month:让结果按时间顺序排列,方便查看趋势

方案2:按年、月分开分组(便于后续筛选)

如果后续需要单独按年或月统计,可以把年和月拆成单独字段:

SELECT
    YEAR(o.order_date) AS order_year,
    MONTH(o.order_date) AS order_month,
    AVG(o.price * o.petrol_qty) AS average_order_amount
FROM ORDERZ o
LEFT JOIN truck t ON o.truck_id = t.truck_id
GROUP BY YEAR(o.order_date), MONTH(o.order_date)
ORDER BY order_year, order_month;

方案3:基于你原有的查询结果计算

如果想复用你之前写的订单详情查询,可以把它作为子查询,在外层统计平均值:

SELECT
    DATE_FORMAT(order_date, '%Y-%m') AS order_month,
    AVG(total_Price) AS average_order_amount
FROM (
    -- 你原有的订单详情查询
    SELECT 
        o.order_id, 
        o.order_date, 
        o.petrol_qty,
        o.price AS price_per_litre,
        (o.price * o.petrol_qty) AS total_Price,
        t.truck_code
    FROM ORDERZ o 
    LEFT JOIN truck t ON o.truck_id = t.truck_id 
    GROUP BY o.order_id
) AS order_details
GROUP BY DATE_FORMAT(order_date, '%Y-%m')
ORDER BY order_month;

小提示:

H2数据库里DATE_FORMAT和TO_CHAR函数都可以用来格式化日期,比如TO_CHAR(o.order_date, 'YYYY-MM')和DATE_FORMAT效果完全一样,选你习惯的写法就行~

内容的提问来源于stack exchange,提问作者valik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:21:36