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

PostgreSQL中分组数据计算B/(B+C)比率的SQL实现

PostgreSQL 按季度分组计算指定分类占比方案

核心逻辑说明

  • 聚合维度:以季度字段QY为单位做聚合统计
  • 计算公式:季度比率 = 同季度下Column2='B'的计数值 /(同季度下Column2='B'计数值 + Column2='C'计数值)
  • 边界处理:加入除零保护,避免某季度无B、C类数据时脚本报错

实现脚本

假设你存储已聚合数据的表名为agg_table,执行时替换为实际表名即可:

SELECT
  QY,
  ROUND(
    SUM(CASE WHEN Column2 = 'B' THEN Count ELSE 0 END)::NUMERIC
    / NULLIF(SUM(CASE WHEN Column2 IN ('B', 'C') THEN Count ELSE 0 END), 0),
    4
  ) AS b_ratio
FROM agg_table
WHERE Column2 IN ('B', 'C')
GROUP BY QY
ORDER BY QY;

针对提供的样例数据,执行后返回结果:

QYb_ratio
1-20210.4000
2-20210.4286

扩展场景:保留所有原始行同时附带季度比率

如果需要保留Column2='A'的原始行,且每行都展示对应季度的计算比率,可以使用窗口函数实现,不需要提前过滤数据:

SELECT
  QY,
  Column2,
  Count,
  ROUND(
    MAX(CASE WHEN Column2 = 'B' THEN Count ELSE 0 END) OVER (PARTITION BY QY)::NUMERIC
    / NULLIF(SUM(CASE WHEN Column2 IN ('B', 'C') THEN Count ELSE 0 END) OVER (PARTITION BY QY), 0),
    4
  ) AS quarter_b_ratio
FROM agg_table
ORDER BY QY, Column2;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 13:09:16