是否有可能sql count()只有列值的第一个实例?

时间:2017-08-26 15:04:14

标签: sql sql-server count

我想计算每个用户初始公司订阅的数量。

在下面的数据集中,我希望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中是否可行,如果是这样,我将如何进行呢?

对于问题措辞的任何改进都会受到欢迎,因为我很难清楚地解释这一点。

2 个答案:

答案 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]

rextester.com

上查看它

答案 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;