首页 > 解决方案 > 列出现的百分比分布?

问题描述

我正在寻找一种方法来计算表中列值的分布。例如,如果我有两行包含“红色”和“蓝色”,每行应该有 50%。我想计算出现的次数col并将其与总行数进行比较。

我的尝试:

SELECT
    log_domain,
    count(log_domain),
    count(log_domain) over(),
    ROUND(
        COUNT(log_domain)
        /
        COUNT(*) OVER()
    ,2) AS percentage

FROM logs

GROUP BY log_domain

有什么帮助吗?谢谢!

标签: sqlpostgresql

解决方案


只需注意整数除法。我经常乘以 1.0:

SELECT log_domain, COUNT(*), COUNT(*) OVER (),
        ROUND(COUNT(*) * 1.0 / SUM(COUNT(*)) OVER (), 2) as ratio
FROM logs
GROUP BY log_domain;

我还注意到分母需要是SUM(COUNT(*))而不是COUNT(*)。您的版本只是除以结果集中的行数——即log_domain.


推荐阅读