MySQL优化用电数据统计:合并峰谷及总用量查询
合并查询实现按站点统计昨日峰谷及总用电量
假设表结构(基于你提到的表)
- NMIList:存储站点基础信息
nmi:站点唯一标识(主键)site_name:站点名称
- Elecdata:存储间隔用电数据
nmi:关联站点的外键reading_time:记录时间(DATETIME类型)kwh:该时间间隔的用电量
合并后的SQL查询语句
将三个独立查询合并为一个,通过条件聚合实现单查询输出结构化结果:
SELECT nl.site_name AS 站点名称, SUM(CASE WHEN TIME(ed.reading_time) BETWEEN '09:00:00' AND '20:59:59' THEN ed.kwh ELSE 0 END) AS 峰期用电量(kWh), SUM(CASE WHEN TIME(ed.reading_time) NOT BETWEEN '09:00:00' AND '20:59:59' THEN ed.kwh ELSE 0 END) AS 谷期用电量(kWh), SUM(ed.kwh) AS 总用电量(kWh) FROM NMIList nl LEFT JOIN Elecdata ed ON nl.nmi = ed.nmi AND DATE(ed.reading_time) = DATE_SUB(CURDATE(), INTERVAL 1 DAY) GROUP BY nl.site_name ORDER BY nl.site_name;
关键说明
- 昨日数据筛选:
DATE_SUB(CURDATE(), INTERVAL 1 DAY)自动匹配昨日日期,兼容5/15分钟间隔的记录。 - 峰谷时段自定义:如果你的峰谷时段不是
09:00-20:59,直接修改TIME(ed.reading_time)的判断区间即可。 - 空数据处理:使用
LEFT JOIN确保无昨日用电数据的站点也会显示(用电量为0)。 - 结构化输出:每个站点一行数据,直接得到峰期、谷期、总用量的统计结果,无需手动合并多查询输出。
示例输出
| 站点名称 | 峰期用电量(kWh) | 谷期用电量(kWh) | 总用电量(kWh) |
|---|---|---|---|
| 城东变电站 | 185.6 | 72.3 | 257.9 |
| 城西工业园 | 241.2 | 58.7 | 299.9 |
| 郊区分站 | 0 | 0 | 0 |
内容的提问来源于stack exchange,提问作者tbru
相关产品推荐
相关产品推荐

