如何根据多个分组获得计数

问题描述:

我正试图找到获取这些计数的最简单方法。如何根据多个分组获得计数

表结构

的GroupId,EVENTID,用户ID,TYPEID
100,1,1,1
100,2,1,1
100,1,1,0
100,如图1所示, 3,0
101,1,1 1

组有一个1到多个事件。
1-n的活动可以被链接到组

1)基团的计数,其中用户1为typeid的1的唯一用户(可以是每组的多个事件,所有的类型必须是1)

2 )用户1是typeid 0的唯一用户的组的计数(可以是每个组的多个事件,全部必须是类型0)

3)用户1不是用于typeid 1的唯一用户的组计数是每组多个事件,都必须是1型)

4)用户1不是用户1的唯一用户数eid 0(可以是多个事件,每个组都必须是0)

你可以使用count(case when)来解决这个问题。

select count(case when t2.cn=1 and t1.UserId = 1 and t1.TypeId =1 then 1 else null end) as case1, 
     count(case when t2.cn=1 and t1.UserId = 1 and t1.TypeId =0 then 1 else null end) as case2, 
     count(case when t2.cn>1 and t1.UserId = 1 and t1.TypeId =1 then 1 else null end) as case3, 
     count(case when t2.cn>1 and t1.UserId = 1 and t1.TypeId =1 then 1 else null end) as case4 
from table1 t1 
join (select count(distinct UserId) as cn, TypeId, from table) t2 
on t1.TypeId = t2.TypeId 

in count(case when)you then 1意味着它会计数,null不会计数。所以你只需要弄清楚应该算什么情况就好了。

+0

我认为这是我所需要的,但我如何按每个组ID进行计数? – user3953989

+0

@ user3953989所以你的意思是表中有相同的groupid,相同的userid,相同的typeid但不同的eventid?现在在这种情况下,由于eventId不相关,因此可以在执行查询之前剪切重复的数据。所以在上面的脚本中,你需要改变t1表,比如(从表中选择不同的groupid,userid ...)t1 –

+0

谢谢我现在会尝试,但是一个组可能有30多个不同用户与每个事件关联。我需要知道有多少组只有用户1事件,有多少组有不同用户的事件。即第10组有20个事件,所有20个事件都与用户1相关联。我需要在第一个事件中对该组进行计数。如果任何事件具有不同的用户,则将计入第三种情况。 (对于类型= 1) – user3953989