PostgreSQL按task_id分组统计job_id数量的查询问题
问题原因
你当前使用的普通GROUP BY语法会把分组维度(project_id, task_id, job_id)相同的行合并为单行,自然无法保留原表所有明细行,同时分组维度包含了job_id也会导致统计的是每个job_id的数量而非每个task_id下的总job数。
正确写法
你需要用PostgreSQL支持的窗口函数实现明细保留+分组统计的需求,正确查询语句如下:
select project_id, task_id, foo, bar, job_id, count(job_id) over (partition by task_id) as "countJobsperTask" from project;
逻辑说明
over (partition by task_id) 会将数据按task_id划分为多个窗口组,count(job_id)会统计每个窗口组内的job_id总数量,这个统计值会自动同步到同组内的每一条明细行上,完全符合你要保留所有原字段、同时新增分组统计列的要求。
内容的提问来源于stack exchange,提问作者TeoK
相关产品推荐
相关产品推荐

