我是 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
但结果是错误的。 我怎样才能做到这一点?
使用
AVG()
聚合函数:
SELECT 100 * AVG((phase = 'sold')::int) AS avg_sold
FROM tablename;
布尔表达式
phase = 'sold'
转换为整数 1
(对于 true
)或 0
(对于 false
),这些值的平均值就是您想要的比率。查看演示。
我们还可以使用SUM和CASE语句的聚合函数来计算百分比:
SELECT
SUM(CASE WHEN phase = 'sold' THEN 1
ELSE 0
END) * 100.0 / Count(*) as percent_sold
FROM table