vw9*_*999 4 sql postgresql group-by
我对 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
Run Code Online (Sandbox Code Playgroud)
我想计算每个日期 c 列中“好”的百分比。我知道如何获得“好”的数量:
SELECT COUNT(c), date FROM my_table WHERE c != 'bad' GROUP BY date;
Run Code Online (Sandbox Code Playgroud)
那返回:
count date
3 2019-05-02
1 2019-05-01
Run Code Online (Sandbox Code Playgroud)
我的目标是得到这个:
date perc_good
2019-05-02 25
2019-05-01 75
Run Code Online (Sandbox Code Playgroud)
所以我尝试了以下方法:
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;
Run Code Online (Sandbox Code Playgroud)
我得到一个错误说
用作表达式的子查询返回的多行。
我找到了这个答案,但不确定如何或它是否适用于我的情况:
如何计算多行的百分比?
avg() 为此目的很方便:
select date,
avg( (c = 'good')::int ) * 100 as percent_good
from t
group by date
order by date;
Run Code Online (Sandbox Code Playgroud)
这是如何运作的? c = 'good'是一个布尔表达式。在::int它真正并将其转换成数字,以1 0假。平均值是一堆 1 和 0 的平均值——并且是真实值的比率。
| 归档时间: |
|
| 查看次数: |
1151 次 |
| 最近记录: |