在postgresql中计算比率

问题描述 投票:0回答:2

我是 postgresql 新手,我正在尝试计算这样的表中的费率:

class  phase
a      sold
b      stock
c      idle
d      sold

我想这样计算

total count of sold phases / total

2/4 = 50%

我正在尝试:

with t as ( select count(class) as total_sold from table where phase='sold')

select total_sold / count(*) from t
group by total_sold

但结果是错误的。 我怎样才能做到这一点?

postgresql average conditional-aggregation
2个回答
3
投票

使用

AVG()
聚合函数:

SELECT 100 * AVG((phase = 'sold')::int) AS avg_sold
FROM tablename;

布尔表达式

phase = 'sold'
转换为整数
1
(对于
true
)或
0
(对于
false
),这些值的平均值就是您想要的比率。

查看演示


0
投票

我们还可以使用SUM和CASE语句的聚合函数来计算百分比:

SELECT 
    SUM(CASE WHEN phase = 'sold' THEN 1 
    ELSE 0
    END) * 100.0 / Count(*) as percent_sold
FROM table
© www.soinside.com 2019 - 2024. All rights reserved.