如果UserId被列出一次或多次,并且如果一个将+1添加到“新用户”,则必须计算,否则将“+1”添加到“返回用户”。
我做过:
select
Count(distinct [UserId]) as 'Unique users'
from [TelemetryData]
where [DiscountId] = '8CAEA860-6766-43E2-9280-27AFE7FDF82E' and [EventName] = 'DiscountClick'
/* returning */
select
count(Id) as 'Returning users'
from [TelemetryData]
where [DiscountId] = '8CAEA860-6766-43E2-9280-27AFE7FDF82E' and [EventName] = 'DiscountClick'
group by [UserId]
having count(Id) > 1
/* returning */
select
count(*) as 'New users'
from [TelemetryData]
where [DiscountId] = '8CAEA860-6766-43E2-9280-27AFE7FDF82E' and [EventName] = 'DiscountClick'
group by [UserId]
having count(*) = 1
我需要在“返回”和“新”用户中查询行的总数,就像在第一个查询中一样。怎么做?
答案 0 :(得分:3)
您可以使用两个级别的聚合执行此操作。计算UserId
级别的计数,然后使用该信息获取所需的计数:
select sum(case when cnt > 1 then 1 else 0 end) as ReturningUsers,
sum(case when cnt = 1 then 1 else 0 end) as NewUsers
from (select UserId, count(*) as cnt
from [TelemetryData]
where [DiscountId] = '8CAEA860-6766-43E2-9280-27AFE7FDF82E' and [EventName] = 'DiscountClick'
group by UserId
) u