SQL按Sector分组计算Val平均值乘2并附加到原行的实现问题
SQL实现方案
你可以使用SQL窗口函数实现需求,无需额外关联子查询,写法简洁高效:
SELECT Sector, Val, ROUND(AVG(Val) OVER (PARTITION BY Sector) * 2, 2) AS AvTot FROM [Consumption] upc WHERE upc.PeriodStart IN ( '2020-12-07 17:00:00', '2021-01-07 17:30:00', '2021-02-10 18:00:00' )
逻辑说明
AVG(Val) OVER (PARTITION BY Sector)是窗口函数语法,作用是按Sector字段分组计算每组Val的平均值,同时保留所有原始行,不会像普通GROUP BY那样压缩行数- 乘以2后用
ROUND(..., 2)控制保留2位小数,匹配你预期的输出精度 - WHERE条件将原多个OR判断改为IN写法,功能完全等价,仅更易读,你也可以保留原有OR写法不影响结果
内容的提问来源于stack exchange,提问作者jcoke
相关产品推荐
相关产品推荐

