我是 PostgreSQL 的新手。我有下表 my_table:
a b c date
1 0 good 2019-05-02
0 1 good 2019-05-02
1 1 bad 2019-05-02
1 1 good 2019-05-02
1 0 bad 2019-05-01
0 1 good 2019-05-01
1 1 bad 2019-05-01
0 0 bad 2019-05-01
我想计算每个日期 c 列中“好”的百分比。我知道如何获得“好”的数量:
SELECT COUNT(c), date FROM my_table WHERE c != 'bad' GROUP BY date;
返回:
count date
3 2019-05-02
1 2019-05-01
我的目标是:
date perc_good
2019-05-02 25
2019-05-01 75
所以我尝试了以下方法:
SELECT date,
(SELECT COUNT(c)
FROM my_table
WHERE c != 'bad'
GROUP BY date) / COUNT(c) * 100 as perc_good
FROM my_table
GROUP BY date;
我得到一个错误提示
more than one row returned by a subquery used as an expression.
我找到了这个答案,但不确定如何或是否适用于我的情况:
Calculating percentage in PostgreSql
如何计算多行的百分比?
最佳答案
avg()
很方便用于此目的:
select date,
avg( (c = 'good')::int ) * 100 as percent_good
from t
group by date
order by date;
这是如何运作的? c = 'good'
是一个 bool 表达式。 ::int
将其转换为数字,1 表示真,0 表示假。平均值就是一堆 1 和 0 的平均值——并且是真实值的比率。
关于sql - 在 Postgres 中计算百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56364637/