如何划分单个 table 上的计数?
How to divide counts on a single table?
这是 Postgres 8.x,特别是 Redshift
我有一个 table,我正在查询 return 单个值,这是简单除法运算的结果。 Table 的纹理看起来像 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
简单的解决方法,一个除以另一个:
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 中与列列表不同:column_one, column_2
这是 Postgres 8.x,特别是 Redshift
我有一个 table,我正在查询 return 单个值,这是简单除法运算的结果。 Table 的纹理看起来像 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
简单的解决方法,一个除以另一个:
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 中与列列表不同:column_one, column_2