我正在使用案例陈述来计算某些标准的统计数据,如下面的
avg(case when det.detection_time >0 then det.blocked_time end)
and
sum(case when det.detection_time =0 then 1 else 0 end)
我应该如何应用案例陈述来获得中位数。。
目前我得到的中位数如下:
PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER by det.blocked_time)
我应该如何将条件“det.detection_time> 0”的情况添加到PERCENTILE_CONT块以获得其中det.detection_time> 0
的组的中位数答案 0 :(得分:2)
您可以使用FILTER来实现它并使您的SQL更清洁:
SELECT
avg(det.blocked_time) FILTER (WHERE det.detection_time > 0),
count(*) FILTER (WHERE det.detection_time = 0),
percentile_cont(0.5) WITHIN GROUP(ORDER by det.blocked_time) FILTER (WHERE det.detection_time > 0)
FROM
my_table det;
答案 1 :(得分:1)
执行此操作的正确方法如下:
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY CASE WHEN det.detection_time >0 THEN det.blocked_time ELSE NULL END) AS [COLUMN NAME]
由于PERCENTILE_CONT是类似于AVG的汇总fxn,因此您需要分组