如何从两个不同的列在postgres百分比?



我的表是在postgre和我有这个表在我的数据库:

category  status   value
type a     open      4
type a     close     5
type b     open      3
type b     close     5
type c     open      2
type c     close     4

,我想计算open status在每个类别中的百分比。公式为:% type x (open) = (open / open + close) * 100

查询,我期望得到:

category    percentage
type a       44,44%
type b       60%
type c       50%

如何用查询得到想要的结果?

提前感谢。

您可以创建一个按类别划分数据的窗口,如下所示:

window w as ( partition by category )

然后您可以在该窗口上进行聚合,以使用定义的窗口获得每个类别打开的数量:

sum(value) filter (where status = 'open') over w

以同样的方式,您可以使用定义的窗口获得每个类别的总数,nullif是为了避免被0分割:

nullif(sum(value) over w, 0)

把它们放在一起:

select distinct on (category)
category,
100 * sum(value) filter (where status = 'open') over w / nullif(sum(value) over w, 0) as percentage
from your_table
window w as ( partition by category );

当我们使用窗口函数而不是分组时,我们需要通过添加distinct on (category)

来删除重复项

我认为聚合将是最有效的:

SELECT category,
100.0 *  -- use a decimal point to force floating point arithmetic
sum(value) FILTER (WHERE status = 'open') /
nullif(sum(value), 0) AS percentage  -- avoid division by zero
FROM your_table
GROUP BY category;

相关内容

  • 没有找到相关文章

最新更新