如何按日期时间戳等特定列分组实现指定列求和?
SQL按时间戳分组求和实现方案
错误原因
你当前编写的SQL存在两点问题:
- 普通聚合
SUM函数需要配合GROUP BY子句指定分组维度,未加分组逻辑时返回的是全表总求和值,和你按天分组的需求不符 - 普通分组聚合会合并同分组的所有行,无法保留每行的
plans、单条total_employees明细字段,不符合你「明细+同组汇总并列展示」的输出要求
推荐实现方案(支持窗口函数的数据库,如MySQL8+、PostgreSQL、Hive、Spark SQL等)
使用窗口聚合函数实现需求,语法如下:
select day_timestamp, plans, total_employees, sum(total_employees) over (partition by day_timestamp) as `total category by date` from `table`
逻辑说明:
partition by day_timestamp指定按时间戳维度划分计算分组- 窗口函数不会合并原始行,会在每一行都返回对应时间戳分组的
total_employees汇总值,完全匹配你需要的输出效果
兼容旧版数据库的实现方案(如MySQL5.x及更早版本)
如果你的数据库不支持窗口函数,可以用子查询先计算每天的汇总值,再和原始表关联得到结果:
select t.day_timestamp, t.plans, t.total_employees, t_total.total as `total category by date` from `table` t left join ( select day_timestamp, sum(total_employees) as total from `table` group by day_timestamp ) t_total on t.day_timestamp = t_total.day_timestamp
内容的提问来源于stack exchange,提问作者Mel
相关产品推荐
相关产品推荐

