如何在单个表上划分计数?

时间:2015-11-04 17:26:50

标签: postgresql amazon-redshift

这是Postgres 8.x,特别是Redshift

我有一个表,我正在查询返回单个值,这是简单除法运算的结果。表格的外观类似于user_id | campaign_title

分区操作类似于campaign_name为ilike %completed%的行数除以不同user_ids的数量。

所以我把所有的分子和分母查询写出来了,但老实说我很困惑如何将它们结合起来。

分子:

select count(*) as num_completed
from public.reward
where campaign_title ilike '%completion%'
;

分母:

select count(distinct(user_id))
from public.reward

1 个答案:

答案 0 :(得分:1)

直截了当的解决方案,只是将其中一个分开:

select (select count(*) as num_completed
        from public.reward 
        where campaign_title ilike '%completion%') 
        / 
       (select count(distinct user_id) from public.reward);

稍微复杂但更快的解决方案:

select count(case when campaign_title ilike '%completion%' then 1 end) 
       /
       count(distinct user_id)
from public.reward;

表达式count(case when campaign_title ilike '%completion%' then 1 end)仅计算满足when子句中指定条件的行。

不相关但是:

distinct 一个函数。写distinct(user_id)是没用的。而且 - 在Postgres的情况下 - 如果你一直认为distinct是一个函数,它实际上会让你陷入麻烦,因为表达式(column_one, column_2)在Postgres中与列表列表不同:{{ 1}}