我正在尝试微调查询并希望得到一些反馈。我有一个job_fact
仓库表,其中包含作业的最终事件 ( final_event_type
) 的计量单位。我正在尝试对将给我一个成功/失败比率的事实进行查询。这是我到目前为止所拥有的:
SELECT
CASE WHEN jf.final_event_type IN (4,6,8,9) THEN count(final_event_type) END as num_failures,
CASE WHEN jf.final_event_type IN (5,7,10) THEN count(final_event_type) END as num_successes
FROM job_fact jf
GROUP BY jf.final_event_type;
此查询仅在两行结果中为我提供原始成功和失败值:
+----------------------+-----------------------+
| num_failures | num_successes |
+----------------------+-----------------------+
| [NULL] | 6 |
| 14 | [NULL] |
+----------------------+-----------------------+
有谁知道是否有办法a)在一条线上获得结果,b)能够计算两者之间的比率(例如失败百分比)。我假设有人会告诉我,我最好为此编写一个程序,但如果可能的话,我想避免它。我知道有一种优雅的方法可以做到这一点,但我猜我今天缺少我的 sql-foo。
我正在运行 PostgreSQL 9.0.1。感谢您提供的任何帮助。
更新
根据选择的答案(来自@Ronnis),这是我的最终查询,以防您想知道:
select
sum(case when final_event_type in(4,6,8,9) then 1 else 0 end) as failures,
sum(case when final_event_type in(5,7,10) then 1 else 0 end) as successes,
count(final_event_type) as total_events,
sum(case when final_event_type in(4,6,8,9) then 1 else 0 end) / count(final_event_type)::decimal as failure_percentage,
sum(case when final_event_type in(5,7,10) then 1 else 0 end) / count(final_event_type)::decimal as success_percentage
from job_fact;