我想计算每个用户初始公司订阅的数量。
在下面的数据集中,我希望user1的计数为3
,而user2的计数为0
。因为user2订阅的两家公司之前都已被user1订阅。
id user companyId activity
-----------------------------------
1 1 101 subscribe
2 1 101 unsubscribe
3 1 102 subscribe
4 1 103 subscribe
5 2 102 unsubscribe
6 2 102 subscribe
7 2 103 unsubscribe
8 2 103 subscribe
这在SQL中是否可行,如果是这样,我将如何进行呢?
对于问题措辞的任何改进都会受到欢迎,因为我很难清楚地解释这一点。
答案 0 :(得分:3)
您可以使用窗口函数row_number()
:
select [user],
count(case when activity = 'subscribe' and rn = 1 then 1 end)
from (select [user],
activity,
row_number() over (partition by companyId order by id) rn
from mytable) as base
group by [user]
上查看它
答案 1 :(得分:2)
您可以使用子查询(下面为fs
)来获取与每个公司的第一个订阅相关联的id
,然后为该子集计算每个用户的公司,如下所示:
select
user,
count(*) as initial_subscriptions
from
(
select companyId, min(id) as id
from the_table
where activity = 'subscribe'
group by companyId
) as fs
inner join the_table on the_table.id = fs.id
group by
user;