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

PostgreSQL如何基于日度病例数据计算每周平均病例数

日度病例表补充周均病例数指标的SQL实现方案

核心逻辑

先基于date字段生成唯一周标识(避免不同年份同周数冲突),再根据你原有查询的输出粒度选择对应方案:

方案1:原有查询为日度/明细粒度,需每行附带对应周的日均病例数

无需大幅修改原有逻辑,外层嵌套窗口函数计算即可,示例如下:

SELECT 
    t.*,
    AVG(t.daily_case_cnt) OVER (PARTITION BY t.week_unique_id) AS weekly_avg_cases
FROM (
    -- 此处直接替换为你现有接近预期的查询语句,仅需补充周标识字段即可
    SELECT 
        date,
        status,
        COUNT(caseID) AS daily_case_cnt,
        -- 生成年+周的唯一标识,以下为MySQL语法,其他数据库可替换为对应逻辑:
        -- PostgreSQL: TO_CHAR(date, 'IYYY-IW')
        -- SQL Server: CONCAT(DATEPART(YEAR, date), '-', DATEPART(WEEK, date))
        DATE_FORMAT(date, '%Y-%u') AS week_unique_id
    FROM Table1
    -- 你原有查询的WHERE、GROUP BY、JOIN等逻辑保持不变
    GROUP BY date, status
) t

方案2:需单独输出每周维度的周均病例数

直接按周聚合计算即可,可根据业务需求调整分母规则:

SELECT 
    week_unique_id,
    -- 规则1:周总病例 / 当周有上报数据的天数
    SUM(daily_case_cnt) / COUNT(DISTINCT date) AS weekly_avg_cases
    -- 规则2:周总病例 / 固定7天,替换为下方写法即可
    -- SUM(daily_case_cnt) / 7 AS weekly_avg_cases
FROM (
    SELECT 
        DATE_FORMAT(date, '%Y-%u') AS week_unique_id,
        date,
        COUNT(caseID) AS daily_case_cnt
    FROM Table1
    GROUP BY week_unique_id, date
) t
GROUP BY week_unique_id

注意事项

  • 周统计规则需对齐业务要求:不同数据库默认的周起始日(周一/周日)、年度首周判定逻辑存在差异,可调整周标识生成函数适配
  • 若需按病例状态分别计算周均值,在PARTITION BY或GROUP BY子句中补充status字段即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:06:07