如何查询全列并按Id分组计算Value列的分组求和值?
正确实现分组求和并保留原列的SQL方案
你的原查询出错原因很明确:子查询里的GROUP BY IDRNC是错误的字段名,应该对应关联的Id;而且这个GROUP BY完全多余——因为WHERE V2.Id = V.Id已经限定了只统计当前Id的所有Value,直接SUM就能得到该分组的总和。
修正后的子查询写法
SELECT Id, Value, (SELECT SUM(Value) FROM Table V2 WHERE V2.Id = V.Id) AS Sum FROM Table V;
更高效的窗口函数写法(推荐)
如果你的数据库支持窗口函数(比如MySQL 8+、PostgreSQL、SQL Server等),用窗口函数会更简洁高效,不需要子查询关联:
SELECT Id, Value, SUM(Value) OVER (PARTITION BY Id) AS Sum FROM Table;
PARTITION BY Id会按照Id对数据分组,自动计算每个分组内Value的总和,同时保留原表的每一行记录,完美匹配你的需求。
内容的提问来源于stack exchange,提问作者Kadson Farias
相关产品推荐
相关产品推荐

