【问题标题】:Generate percentage metrics between two queries在两个查询之间生成百分比指标
【发布时间】:2020-08-31 14:13:59
【问题描述】:

如何在不同条件的同一张表上生成两个查询之间的百分比度量?

示例:

_________________________________________
            |        |         |
environment | online | offline | metrics
____________|________|_________|_________

  web          3         1         75%
  docker       2         1         50%  

查询 1:

Select environment, count(available) from tb_infra where available = 'ON' group by environment order by count desc

查询 2:

Select environment, count(available) from tb_infra where available = 'OFF' group by environment order by count desc

【问题讨论】:

    标签: sql database postgresql group-by count


    【解决方案1】:

    您可以进行条件聚合。 Postgres 支持的用于聚合函数的标准 filter 子句非常方便:

    select
        environment,
        count(*) filter(where available = 'ON')  online,
        count(*) filter(where available = 'OFF') offline,
        avg((available = 'ON')::int) metrics
    from tb_infra 
    group by environment
    

    在此结果集中,metrics 是介于 01 之间的值,表示 'ON' 记录的比率。您可以通过将其乘以 100 轻松地将其转换为百分比。

    【讨论】:

    • 简直太棒了,非常感谢您的解释和帮助!
    • 一个疑问,它会是什么样子而不是 0.75,显示 75.30?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多