无法在SQL中划分为两个单独列表的计数,始终返回1

时间:2019-04-22 20:53:04

标签: sql postgresql

我有一份活动清单。一个事件名称是创建一个帐户,另一个事件名称是创建一个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。

1 个答案:

答案 0 :(得分:0)

条件聚合是编写查询的一种简单得多的方法。您似乎正在使用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;