我进行了一项民意调查,投票结果来自用户。例如:
您想要菲亚特吗?
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;
但是这将显示计数,我正在寻找相对百分比。知道我该怎么做吗?
您可以COUNT
在分区上获取每种答案类型的值:
SELECT DISTINCT answer,
COUNT(*) OVER (partition BY answer) AS total,
COUNT(*) OVER (partition BY answer) * 100 /
COUNT(*) OVER () AS percentage
FROM fast_survey
如果要在百分比中获得更高的精度(对于上面的查询,它是整数除法,请将第一个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
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;
怎么样:
只需将其与您在其中查找所有记录的表一起加入,而无需对答案进行除法并计算百分比...类似这样的事情