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

如何修正SQL以计算repairs表中所有记录的月度平均成本?

修复你的SQL:计算维修表的月度平均成本

嘿,我来帮你搞定这个SQL问题~先看看你原来的语句哪里出问题了:

你的子查询里只统计了每个月的记录数量count(*),完全没用到核心的cost字段,外层还试图对记录数求平均——这显然和你要的「月度平均成本」完全不沾边呀!

正确的解决方案分两种情况,看你具体需求:


需求1:按月份统计每个月的平均维修成本(最常用的场景,比如查看1月、2月各自的平均成本)

SELECT 
  MONTH(start_date) AS month_number,
  -- 可选:添加月份名称让结果更直观,不同数据库写法略有差异
  -- MySQL: MONTHNAME(start_date) AS month_name
  -- SQL Server: DATENAME(month, start_date) AS month_name
  -- PostgreSQL: TO_CHAR(start_date, 'Month') AS month_name
  AVG(cost) AS monthly_average_cost
FROM repairs
WHERE cost IS NOT NULL -- 排除成本为空的记录,避免拉低平均值
GROUP BY MONTH(start_date)
-- 如果加了月份名称,分组也要加上:GROUP BY MONTH(start_date), month_name
ORDER BY month_number;

需求2:计算所有月度平均成本的整体平均值(比如把每个月的平均成本再求一次平均)

如果你要的不是每个月的单独数据,而是所有月份平均成本的均值,可以用嵌套查询:

SELECT AVG(monthly_avg) AS overall_monthly_average
FROM (
  -- 先算出每个月的平均成本
  SELECT AVG(cost) AS monthly_avg
  FROM repairs
  WHERE cost IS NOT NULL
  GROUP BY MONTH(start_date)
) AS monthly_averages;

关键注意点:

  • 一定要过滤掉cost IS NULL的记录,虽然AVG()函数会自动忽略空值,但显式写出来更清晰,也避免后续逻辑出错
  • 如果你的数据跨年度,建议按年份+月份分组,比如GROUP BY YEAR(start_date), MONTH(start_date),不然2023年1月和2024年1月会被合并计算

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:18:17