我有一个事件列表。一个事件名称正在创建一个帐户,另一个正在使用Facebook创建一个帐户。我想看看使用Facebook创建的帐户所占的百分比。
下面的代码将给我一个准确的facebook账户数和总账户数,但当我试图除以这两个数字时,它只给了我数字1。
我对SQL很陌生,花了好几个小时试图弄清楚它为什么这样做毫无用处。

with
fb_act as (
  select *
  from raw_event
  where name = 'onboard_fb_success'
    and event_ts::date >= current_date - 30
),
total_act as (
  select *
  from raw_event
  where name ='create_account'
    and event_ts::date >= current_date - 30
)
select count(fb_act)/count(total_act), total_act.event_ts::date as day
from total_act, fb_act
group by day
order by day

我希望输出大约是~.3,但实际输出总是正好是1。

最佳答案

条件聚合是编写查询的更简单的方法。您似乎在使用Postgres,所以如下所示:

select re.event_ts::date as day,
       (sum( (name = 'onboard_fb_success' and event_ts::date >= current_date - 30):: int) /
        sum( name = 'create_account' and event_ts::date >= current_date - 30)::int)
       ) as ratio
from raw_event re
group by re.event_ts::date
order by day;

关于sql - 无法在SQL中划分为两个单独列表的计数,始终返回1,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55801000/

10-12 12:41
查看更多