我正在加入3个表来获得保留率。这是我的疑问:
select first_visit.first_month as first_month,
new_users.new_users as new_users,
count(distinct visit_tracker.customer__id) as retained,
cast(count(distinct visit_tracker.customer__id) / new_users.new_users as float) as retention_percent
from first_visit
left join visit_tracker
on visit_tracker.customer__id=first_visit.customer__id
left join new_users
on new_users.first_month=first_visit.first_month
group by 1,2;
我得到以下输出:
first_month new_users retained retention_percent
0 93 34 0
1 119 42 0
2 188 102 0
3 223 71 0
等等
我想要的是:
first_month new_users retained retention_percent
0 93 34 0.37
1 119 42 0.35
2 188 102 0.54
3 223 71 0.32
我不确定为什么它没有产生我想要的结果。有什么输入吗?
答案 0 :(得分:1)
这看起来像整数除法问题的经典案例。
在这种情况下,count(distinct visit_tracker.customer__id)
将返回一个整数,然后除以float。看起来浮点数被转换为整数,因此除法的结果是整数。因为预期答案小于1,所以它会截断为零。查询的as float
部分无效,因为截断已经发生后会发生这种情况。
在执行除法之前,请确保分子和分母都是浮点数,或者事先按this stackoverflow answer建议乘以100。