【问题标题】:PostgreSQL: Calculate percentage of rows with a column above a certain valuePostgreSQL:计算列高于某个值的行的百分比
【发布时间】:2020-11-25 19:42:09
【问题描述】:

假设我有值表:

+----+-------+
| Id | Value |
+----+-------+
| 1  |  2    |
| 2  |  9    |
| 3  |  5    |
| 4  |  5    |
| 5  |  8    |
| 6  |  1    |
+----+-------+

如何计算值高于给定阈值的行的百分比:

例如,阈值 '高于 5',我如何查询以获得以下信息:

+-------+------------------+
| Total | Percent above 5  |
+-------+------------------+
|   6   |     33.33        |
+-------+------------------+

【问题讨论】:

    标签: sql postgresql psql percentage threshold


    【解决方案1】:

    使用条件聚合:

    select count(*),
           avg( (value > 5)::int ) * 100 as percentage_above_5
    from t;
    

    【讨论】:

    • 百分比是否正确?也许是ratio_to_report 而不是sum
    • 你好@GordonLinoff,只是一个问题,你为什么要转换成表达式(value > 5)
    • @Alexis 。 . .我认为 avg() 不适用于布尔值。你也可以使用avg(case when value > 5 then 1 else 0 end)
    • 非常感谢@GordonLinoff,我现在明白了,它是一个布尔值!,我猜如果你把它转换为 1,如果为真,那么加起来就是最终乘以的平均值。
    猜你喜欢
    • 1970-01-01
    • 2019-02-09
    • 2021-11-22
    • 2013-10-27
    • 2017-08-08
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多