SQL重复行求和查询求助:按ref和manager去重计算时长总和
解决按ref和manager分组求和的SQL问题
别担心,这个需求其实是SQL里非常常见的分组聚合场景,应该是你之前没用到正确的分组方式~ 直接给你解决方案,再结合示例讲清楚逻辑:
核心SQL语句
SELECT ref, manager, SUM(hours) AS total_hours FROM your_table_name GROUP BY ref, manager;
逻辑解释
GROUP BY ref, manager:这一步会把ref和manager字段值完全相同的所有行归为同一组,自动消除这两个字段的重复组合SUM(hours):对每一组内的hours字段值求和,得到该组的总时长AS total_hours:给求和后的字段起一个直观的别名,方便后续使用或查看结果
结合示例数据验证
假设你的输入数据是这样的:
| ref | manager | hours |
|---|---|---|
| REF01 | Alice | 2 |
| REF01 | Alice | 3 |
| REF02 | Bob | 1 |
| REF02 | Alice | 4 |
| REF01 | Bob | 2 |
执行上面的SQL后,会得到你想要的预期输出:
| ref | manager | total_hours |
|---|---|---|
| REF01 | Alice | 5 |
| REF02 | Bob | 1 |
| REF02 | Alice | 4 |
| REF01 | Bob | 2 |
额外提示
- 记得把语句里的
your_table_name替换成你实际使用的表名 - 如果需要先过滤某些数据,可以在
GROUP BY之前添加WHERE子句(比如WHERE hours > 0) - 如果想让结果按特定顺序排列,在末尾加
ORDER BY ref, manager即可
内容的提问来源于stack exchange,提问作者Lyrical
相关产品推荐
相关产品推荐

