如何查询计算相同ID的Value1总和与不匹配记录的Value2总和
实现方案
通用SQL实现(支持MySQL、PostgreSQL、SQL Server等绝大多数关系型数据库)
核心逻辑为按ID分组后,对Value1直接求和,对Value2先判断同分组下数值是否全部一致,再决定取原值还是求和:
SELECT ID, SUM(Value1) AS Value1, CASE WHEN COUNT(DISTINCT Value2) = 1 THEN MAX(Value2) ELSE SUM(Value2) END AS Value2 FROM 你的表名 GROUP BY ID ORDER BY ID;
逻辑说明
- 用
GROUP BY ID将相同ID的记录归为同一组 - Value1字段直接调用
SUM()聚合函数求和,完全匹配需求 - Value2字段通过
CASE WHEN做分支处理:- 用
COUNT(DISTINCT Value2)统计当前ID分组下Value2的去重后数量,若等于1说明所有值完全相同,取MAX(Value2)即可(MIN、AVG返回结果一致,可任选) - 若去重后数量大于1,说明存在不同值,调用
SUM(Value2)求和即可
- 用
Pandas实现(Python场景)
如果是用Python处理表格数据,可参考以下代码:
import pandas as pd # 示例数据构造,实际使用时替换为你自己的数据读取逻辑即可 df = pd.DataFrame({ 'ID': [1,1,2,2,3], 'Value1': [30,32,20,20,10], 'Value2': [50,50,60,65,70] }) # 自定义Value2的聚合规则 def handle_value2(group): if group.nunique() == 1: return group.iloc[0] return group.sum() # 分组聚合得到结果 result = df.groupby('ID').agg( Value1 = ('Value1', 'sum'), Value2 = ('Value2', handle_value2) ).reset_index() print(result)
以上两种实现返回的结果都和你给出的预期结果完全一致。
内容的提问来源于stack exchange,提问作者Jasurbek16
相关产品推荐
相关产品推荐

