我试图找到获得这些重要性的最简单方法。
表格结构
GroupId,EventId,UserId,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不是typeid 0的唯一用户的组计数(每组可以是多个事件,都必须是0)
答案 0 :(得分:2)
你可以使用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
在count(大小写的情况下),然后1表示它将计数,null将不计数。所以你只需要弄清楚应该算什么案例就可以了。