这是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
答案 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}}