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

如何在PostgreSQL中基于两列计算各分类open状态的百分比

PostgreSQL 分类占比查询实现方案

你可以通过条件聚合搭配PostgreSQL内置的格式化函数实现需求,具体SQL如下:

SELECT
  category,
  -- 格式化输出:将小数分隔符替换为逗号,添加百分号
  REPLACE(
    TO_CHAR(
      -- 计算open值占总值得百分比,转numeric避免整数除法丢失精度
      (SUM(CASE WHEN status = 'open' THEN value ELSE 0 END)::NUMERIC / SUM(value)::NUMERIC) * 100,
      'FM999D99%'
    ),
    '.', ','
  ) AS percentage
FROM table1
GROUP BY category
ORDER BY category;

逻辑说明

  • 用CASE WHEN status = 'open' THEN value ELSE 0 END筛选出open状态的value值,配合SUM聚合得到每个分类下open的总数值
  • SUM(value)直接计算每个分类所有状态的value总和
  • 转NUMERIC类型是为了避免PostgreSQL整数除法默认舍去小数的问题,保证计算精度
  • TO_CHAR函数用于将计算得到的百分比数值格式化为带百分号的字符串,FM修饰符可以去掉结果中多余的前导空格
  • 最后用REPLACE将默认的小数点替换为逗号,匹配你需要的输出格式

如果你的示例期望结果存在手误,只需要调整CASE WHEN里的status取值即可匹配对应计算逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:30:01