我想计算拥有唯一存储桶 A、唯一存储桶 B 或同时拥有存储桶 A 和 B 的唯一用户。我的表格如下所示:
DateKey User Bucket
05-18 1 A
05-18 1 B
05-18 2 B
05-18 3 A
05-18 4 A
05-18 4 A
04-18 1 A
04-18 1 B
04-18 2 B
04-18 3 A
04-18 4 A
04-18 4 A
在此处获取结构 http://sqlfiddle.com/#!18/45a36/1
我想要的结果是这样的:
DateKey Bucket UniqueUsers
05-18 A 2
B 1
A+B 1
04-18 A 2
B 1
A+B 1
谢谢您的帮助。
最佳答案
见:http://sqlfiddle.com/#!18/45a36/11
select DateKey
, max(case
when IsA = 1 and IsB = 0 then 'A'
when IsA = 0 and IsB = 1 then 'B'
when IsA = 1 and IsB = 1 then 'A+B'
end) Bucket
, count(distinct [User]) UniqueUsers
from
(
select DateKey
, [User]
, max(case when bucket = 'A' then 1 else 0 end) IsA
, max(case when bucket = 'B' then 1 else 0 end) IsB
from table1
group by DateKey, [User]
) x
group by DateKey, IsA, IsB
order by DateKey, IsA + (IsB * 2)
我们的子查询将每个用户/日期键压缩为 1 行,其中包含列以说明是否有 A 和/或 B 的值。
然后我们可以通过
DateKey
对这些行进行分组, IsA
和 IsB
将它们压成 1 行 DateKey
IsA
的值和每个组合和 IsB
( 1, 0
、 0, 1
和 1, 1
; 0, 0
不存在,因为这要求 table1
中没有行,因此不会产生结果)。最后,我们计算每个组中不同用户的数量。
注意:订购只是为了获得
A, B, A+B
... 即我已经做到了 (1,0)
= 1, (0,1)
= 2, (1,1)
= 3。
关于SQL 组用户,如果他们属于一个或多个组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50525392/