查找相对百分比

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

我进行了一项民意调查,投票结果来自用户。例如:

您想要菲亚特吗?

id | answer
1    yes
2    no 
3    yes
...
25   no

count = 20 yes / 5 no

(20 * 100) /25 = 80% Yes
(5 * 100) /25 = 20% No

因此,80%的人想要菲亚特,20%的人不想要。显然我可以做类似的事情:

select answer, count(*) as total from fast_survey group by answer;

但是这将显示计数,我正在寻找相对百分比。知道我该怎么做吗?

sql postgresql aggregate percentage
4个回答
2
投票

您可以COUNT在分区上获取每种答案类型的值:

SELECT DISTINCT answer,
       COUNT(*) OVER (partition BY answer) AS total,
       COUNT(*) OVER (partition BY answer) * 100 /
       COUNT(*) OVER () AS percentage
FROM fast_survey

Demo on SQLFiddle

如果要在百分比中获得更高的精度(对于上面的查询,它是整数除法,请将第一个COUNT强制转换为FLOAT:]]

SELECT DISTINCT answer,
       COUNT(*) OVER (partition BY answer) AS total,
       CAST(COUNT(*) OVER (partition BY answer) AS FLOAT) * 100 /
       COUNT(*) OVER () AS percentage
FROM fast_survey

Demo on SQLFiddle


1
投票
SELECT round(count(*) FILTER (WHERE answer)     * 100.0 / count(*), 2) AS pct_yes
     , round(count(*) FILTER (WHERE NOT answer) * 100.0 / count(*), 2) AS pct_no
FROM   fast_survey;

0
投票

怎么样:


0
投票

只需将其与您在其中查找所有记录的表一起加入,而无需对答案进行除法并计算百分比...类似这样的事情

© www.soinside.com 2019 - 2024. All rights reserved.