You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Postgres如何合并统计工单周创建、周解决量的两个SQL查询

Postgres 工单周度统计合并查询实现方案

下面提供两种常用的实现方式,均可满足需求:

方案1:FULL OUTER JOIN 关联两个聚合子查询

通过全外连接关联每周创建数、每周解决数两个独立统计结果,避免某周只有创建工单/只有解决工单时数据遗漏。

SELECT
  COALESCE(c.week, r.week) AS statistic_week,
  COALESCE(c.created_count, 0) AS weekly_created_count,
  COALESCE(r.resolved_count, 0) AS weekly_resolved_count
FROM (
  -- 子查询:统计每周创建工单数
  SELECT 
    date_trunc('week', createddate) AS week,
    COUNT(id) AS created_count
  FROM tickets
  GROUP BY 1
) c
FULL OUTER JOIN (
  -- 子查询:统计每周解决工单数
  SELECT 
    date_trunc('week', resolutiondate) AS week,
    COUNT(id) AS resolved_count
  FROM tickets
  WHERE resolutiondate IS NOT NULL
  GROUP BY 1
) r ON c.week = r.week
ORDER BY statistic_week;

方案2:UNION ALL + 条件聚合(性能更优)

仅需扫描一次表,适合数据量较大的场景:先把每个工单的创建、解决事件拆分为两行数据,再按周分组聚合统计。

SELECT
  week AS statistic_week,
  SUM(created_flag) AS weekly_created_count,
  SUM(resolved_flag) AS weekly_resolved_count
FROM (
  -- 提取所有工单的创建时间维度
  SELECT
    date_trunc('week', createddate) AS week,
    1 AS created_flag,
    0 AS resolved_flag
  FROM tickets
  UNION ALL
  -- 提取已完工单的解决时间维度
  SELECT
    date_trunc('week', resolutiondate) AS week,
    0 AS created_flag,
    1 AS resolved_flag
  FROM tickets
  WHERE resolutiondate IS NOT NULL
) t
GROUP BY 1
ORDER BY 1;

补充说明

  • 两种方案均通过COALESCE或者初始赋值0的方式,避免某周只有一类工单时另一列返回NULL的问题
  • 如果需要限定统计的时间范围,可在对应子查询中添加时间过滤条件

内容的提问来源于stack exchange,提问作者mwalker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 16:15:03