一周内活动的#天分布:我试图找出在3 / 1-3 / 7的特定一周内1天,2天,3天,…7天的活跃会员数。
有没有办法在分区的顶部使用聚合函数? 如果没有,可以使用什么来实现这一目标?
select distinct memberID,count(date) over(partition by memberID) as no_of_days_active
from visitor
where date between '"2019-01-01 00:00:00"' and '"2019-01-07 00:00:00"'
order by no_of_days_active
结果应该看起来像这样
#Days Active Count
1 20
2 32
3 678
4 34
5 3
6 678
7 2345
答案 0 :(得分:0)
我认为您希望通过两个聚合级别来计算一周中的天数:
select num_days_active, count(*) as num_members
from (select memberID, count(distinct date::date) as num_days_active
from visitor
where date >= '2019-01-01'::date and
date < '2019-01-08'::date
group by memberID
) v
group by num_days_active
order by num_days_active;
请注意,我更改了日期比较。如果您有时间成分,则between
不起作用。而且,由于您在常量中包括了时间,因此我为count(distinct)
添加了一个明确的日期转换。如果date
实际上是没有时间成分的日期,则可能没有必要。
答案 1 :(得分:0)
ing带@Gordon的答案,我个人喜欢对子查询使用with
语句:
with dat as (
select distinct
memberID,
count(date) over(partition by memberID) as no_of_days_active
from visitor
where 1=1
and date between '2019-01-01'::date and '2019-01-07'::date
order by no_of_days_active
)
select
no_of_days_active,
count(no_of_days_active) no_of_days_active_cnt
from dat
group by no_of_days_active
order by no_of_days_active