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

MariaDB如何编写SQL计算DTP表的日周月年平均发电量

你原SQL的核心问题

  • 语法逻辑错误:WHERE (year(DT) AND month(DT) AND day(DT)) 是布尔逻辑运算,返回的是0/1值,无法匹配子查询返回的多列结果
  • 子查询字段不匹配:IN子查询返回的字段顺序和数量都和外层条件要求不一致,且多余返回了PWR字段,子查询末尾还多写了分号导致语法报错
  • 逻辑冗余:统计周期聚合不需要嵌套子查询,直接按时间维度分组即可实现

各统计周期查询实现

你使用的MariaDB 10.5版本原生支持常用的时间处理函数,直接按对应维度分组取AVG即可,以下是各维度的独立查询:

1. 日平均发电量

按天分组统计每天所有10分钟采样的平均功率:

SELECT 
  DATE(DT) AS 统计日期,
  AVG(PWR) AS 日平均发电功率_kW
FROM DTP
WHERE DT IS NOT NULL
GROUP BY 统计日期
ORDER BY 统计日期;

2. 周平均发电量

使用YEARWEEK函数处理周维度,第二个参数设为1代表周从周一开始计算,符合国内统计习惯:

SELECT 
  YEARWEEK(DT, 1) AS 统计年周,
  AVG(PWR) AS 周平均发电功率_kW
FROM DTP
WHERE DT IS NOT NULL
GROUP BY 统计年周
ORDER BY 统计年周;

3. 月平均发电量

SELECT 
  DATE_FORMAT(DT, '%Y-%m') AS 统计月份,
  AVG(PWR) AS 月平均发电功率_kW
FROM DTP
WHERE DT IS NOT NULL
GROUP BY 统计月份
ORDER BY 统计月份;

4. 年平均发电量

SELECT 
  YEAR(DT) AS 统计年份,
  AVG(PWR) AS 年平均发电功率_kW
FROM DTP
WHERE DT IS NOT NULL
GROUP BY 统计年份
ORDER BY 统计年份;

补充说明

如果你的需求是计算周期内总发电量的平均值,而非采样点功率的平均值,需要先按小粒度求和再取平均。比如计算所有日期的日均总发电量(单位kWh),每个10分钟是1/6小时,单条记录对应发电量为PWR * 1/6:

SELECT AVG(daily_total) AS 日均总发电量_kWh
FROM (
  SELECT SUM(PWR * 1/6) AS daily_total
  FROM DTP
  WHERE DT IS NOT NULL
  GROUP BY DATE(DT)
) t;

其他周期的总发电量平均可以按照这个逻辑修改分组维度即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:42:06