如何在SQL中针对特定IP设备对数值进行指定倍数计算?
修改后的SQL脚本及说明
方案1:仅获取目标计算总和(无日期分组)
如果只需要得到指定IP设备的POWER计算总和(650),可以用CASE语句针对不同IP做差异化计算后求和:
SELECT SUM( CASE WHEN device = '192.168.25.35' THEN power * 2 WHEN device = '192.168.25.36' THEN power ELSE 0 END ) AS calculated_power FROM energy.realtime WHERE device IN ('192.168.25.35', '192.168.25.36');
方案2:按转换后的日期分组统计
如果需要保留日期字段并按UTC时间分组统计每日的计算结果,需添加GROUP BY子句(避免聚合函数与非聚合字段冲突):
SELECT SUM( CASE WHEN device = '192.168.25.35' THEN power * 2 WHEN device = '192.168.25.36' THEN power ELSE 0 END ) AS calculated_power, CONVERT_TZ(date_of_reading, '+2:00', '+00:00') AS date_of_reading FROM energy.realtime WHERE device IN ('192.168.25.35', '192.168.25.36') GROUP BY CONVERT_TZ(date_of_reading, '+2:00', '+00:00');
关键说明
- 原脚本直接
SUM(power)会累加原始POWER值,无法实现192.168.25.35的POWER翻倍需求; CASE语句精准匹配目标IP,对192.168.25.35的POWER值执行×2操作,192.168.25.36保持原值,最终求和得到预期结果650;- 方案2中
GROUP BY必须与SELECT中的非聚合字段(转换后的日期)一致,否则会因SQL模式限制报错。
内容的提问来源于stack exchange,提问作者stewietopg
相关产品推荐
相关产品推荐

