计算具有... SQL的行数

时间:2016-10-19 10:46:02

标签: sql sql-server having

如果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 

我需要在“返回”和“新”用户中查询行的总数,就像在第一个查询中一样。怎么做?

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