使用 group by 和 have 子句计算同一表中子查询的百分比

如何解决使用 group by 和 have 子句计算同一表中子查询的百分比

我正在使用 PostGres 10.12 DB,其中包含有关测试的各种字段:

|test_name|result |report_time|main_version|environment|
|    A    |error  |29/11/2020 |     1      |   john    |
|    A    |failure|28/12/2020 |     1      |   john    |
|    A    |error  |29/12/2020 |     1      |   alice   |
|    B    |passed |30/12/2020 |     2      |   ben     |
|    C    |failure|31/12/2020 |     2      |   alice   |
|    A    |error  |31/12/2020 |     2      |   john    |

我正在尝试计算在同一天运行的所有测试中同时具有“失败/错误”和“通过”结果的测试的百分比。

我创建了以下查询

SELECT s.environment,COUNT(*) AS total,COUNT(*)::float / t.total_tests * 100 as percentage
FROM (
     SELECT test_name,environment
     FROM tests where report_time >= Now() - interval '5 day' 
     and main_version='1' and environment='John'
     GROUP BY test_name,environment
     having COUNT(case when result in ('failure','error') then 1 else null end) > 0 
     and count(case when result = 'passed' then 1 else null end) > 0
     order by environment asc
) s
CROSS JOIN (
      SELECT COUNT(*) AS total_tests FROM tests where report_time >= Now() - interval '5 day' 
      and main_version='1' and environment='John'
) t
GROUP BY s.environment,t.total_tests  

这适用于单个环境和版本。当我尝试组合环境时,计数错误
如何正确计算每天的正确百分比?

解决方法

我正在尝试计算在同一天运行的所有测试中同时具有“失败/错误”和“通过”结果的测试的百分比。

我不知道“同一天”指的是什么。示例数据是从五天范围内获取数据,所以我猜这就是您的意思。

无论如何,基本思想是使用条件聚合:

SELECT test_name,environment,AVG( (result = 'passed')::int ) as passed_ratio,AVG( (result in ('failure','error') )::int ) as fail_error_ratio
FROM tests 
WHERE report_time >= now() - interval '5 day'  AND
      main_version = '1' AND
      environment = 'John'
GROUP BY test_name,environment;

这将返回 0 到 1 之间的比率。如果您想要 0 到 100 之间的百分比,只需乘以 100。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?